投稿

2020.06.26

Headless Components In React And Why I Stopped Using A Ui Library For Our Design System

Have a project that could use some consulting or frontend help? Music I play music with my wife and brother in our home studio. Although concepts like actions or selectors exist in Zustand, the leading role is played by hooks. For example, the create function used to create a Zustand store returns a hook for use in React components. The core concepts to understand in Recoil are atoms and selectors. An atom is a unit of state that wraps and represents a single state property.

Each component has been built from scratch as a true React component, without unneeded dependencies like jQuery. React can also render on the server using Node and power mobile apps using React Native. Since component logic is written in JavaScript instead of templates, you can easily pass rich data through your app and keep state out of the DOM. Build encapsulated components that manage their own state, then compose them to make complex UIs.

Chakra Ui

Since its announcement in early 2020, Recoil has gathered a fair bit of interest from the React community. Partially thanks to its atomic, React-inspired approach to state management, but also thanks to it coming straight from the Facebook team. Although it’s still in an “experimental” phase, Recoil is already relatively stable and feature-rich.

From the multitude of JavaScript UI frameworks, React is likely the one that enjoys the most vibrant ecosystem, including state management libraries. This article will go through the top 6 of those libraries and compare them to see which one is the best choice for your next React app. Whether you’re using React or another library, Create React App Angular vs React lets you focus on code, not build tools. Mantine is an extensive component library with 120 customizable components combined to a sophisticated token architecture. Radix Primitives is a low-level UI component library with a focus on accessibility, customization and developer experience. Each component is implemented with accessibility in mind.

We test Create React App to make sure that all of its underlying pieces work together seamlessly – no complicated version mismatches. One of the most popular React component library, MUI implements Material Design from Google. BaseWeb is an extensive React component library developed by Uber.

The result is a set of accessible-by-default components, over what is possible from plain Bootstrap. So there you have it – React state management libraries you should consider for this year. Naturally, there are many more libraries like these out there, with more coming out seemingly https://globalcloudteam.com/ every day. That’s why this list is likely to change within a year or even sooner. The best choice is to use what works but be aware of what’s out there, just in case something better comes around. On top of that, Hookstate is very scalable thanks to its handling of nested state.

Recoil builds upon atoms and selectors to provide advanced tools in every state management area – from coding to dev tools and testing. This approach makes Recoil easy for beginners and powerful enough for advanced users. You bring your own tokens structure and apply your styling on top of the pre-build components.

React Library

It simplifies the store setup, reduces the required boilerplate, and follows the best practices by default. Additionally, it comes batteries-included with, e.g., Immer to allow for easy state changes, and Redux-Thunk to work with async logic. In Redux, you can change the state only by dispatching an action – an object describing what should happen. This, in turn, runs a function called a reducer, which, given an action object and previous state, returns a new state. React Aria doesn’t implement any rendering or impose a DOM structure, styling methodology, or design-specific details. It provides behavior, accessibility, and interactions and lets you focus on your design.

I wrote a book called Atomic Design, which covers all that goes into creating and maintaining effective design systems. Built with compatibility in mind, we embrace our bootstrap core and strive to be compatible with the world’s largest UI ecosystem. Under the hood, we use webpack, Babel, ESLint, and other amazing projects to power your app. If you ever want an advanced configuration, you can ”eject” from Create React App and edit their config files directly.

They enforce Redux’s best practices and make state management easier. Reach UI seeks to become the accessible foundation of your React-based design system. Nir Ben-Yair wrote a great article about React Unstyled Components and why you should use them. The React component model gives us more control over form and function of each component. By relying entirely on the Bootstrap stylesheet, React-Bootstrap just works with the thousands of Bootstrap themes you already love.

Only One Dependency

Most of them have a sophisticated theming systems with more or less design token granularity. Get the library you like, tune the styling through their theming system and go. We’ve used a few libraries before with good success, and this “bring your own look and feel” to otherwise sturdy UI components feels like a solid handshake to me. While the Redux model has been around for a while now, its biggest issue is the related boilerplate.

Staying in the Redux world a little longer, there’s an alternative to Redux Toolkit that’s worth mentioning. It’s called Rematch and is lighter, faster, and easier to use than Redux Toolkit. In contrast, Jotai doesn’t require keys and depends entirely upon JavaScript’s built-in WeakMap to track its atoms. This means the JS engine handles garbage collection automatically, allowing for optimized memory usage and thus better performance. To use atoms and selectors, you’ll need to utilize one of Recoil’s hooks, like useRecoilValue or useRecoilState.

Headless Components In React And Why I Stopped Using A Ui Library For Our Design System

Intended to be used with Tailwindcss, it can also be used by any CSS utility solution. Using props and state, we can put together a small Todo application. This example uses state to track the current list of items as well as the text that the user has entered. Although event handlers appear to be rendered inline, they will be collected and implemented using event delegation. For such cases, React has built-in tools – namely State and Context APIs.

You can think of it as an equivalent to React’s local state , but with the ability to be shared among components and created outside of them. The best example is React-Ariathat provides composable primitives to create accessible components. Although using a dedicated library – especially the latest and greatest one – is tempting, it’s worth noting that it’s not always necessary. In small to medium apps, adding an additional dependency, meaning additional bundle size, complexity, concepts, and more, can create more harm than good. These component libraries are fully styled components ready-to-use.

  • Staying in the Redux world a little longer, there’s an alternative to Redux Toolkit that’s worth mentioning.
  • React Aria doesn’t implement any rendering or impose a DOM structure, styling methodology, or design-specific details.
  • In Redux, you can change the state only by dispatching an action – an object describing what should happen.
  • Each component is implemented with accessibility in mind.
  • Add to all that a good extension system, TypeScript and Redux DevTools support, and Hookstate looks to be one of the most attractive solutions for fans of React hooks.
  • Speaking of hook-centric libraries, Hookstate definitely counts as one.
  • If you noticed from the previous snippets, Recoil tracks its state by string keys – that’s why their required and must be unique.

React components implement a render() method that takes input data and returns what to display. Input data that is passed into the component can be accessed by render() via this.props. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes. State management is one of the most important aspects of every app.

Rebuilt With React

Debugging a web application in production may be challenging and time-consuming. OpenReplay is an Open-source alternative to FullStory, LogRocket and Hotjar. It allows you to monitor and replay everything your users do and shows how your app behaves for every issue. It’s like having your browser’s inspector open while looking over your user’s shoulder.

React Library

With this library, you can use nested data structures with little to no performance loss thanks to mutations, scoped states, and other optimizations. Apart from all the above, the most significant difference between Recoil and Jotai is probably the performance, specifically the garbage collection. If you noticed from the previous snippets, Recoil tracks its state by string keys – that’s why their required and must be unique. It’s uncomfortable, ineffective, and can lead to memory leaks.

Fully Styled Components #

As one of the oldest React libraries, React-Bootstrap has evolved and grown alongside React, making it an excellent choice as your UI foundation. Try the Babel REPL to see the raw JavaScript code produced by the JSX compilation step. Declarative views make your code more predictable and easier to debug.

Understanding The Container Component Pattern With React Hooks

Although Redux has received a lot of criticism recently, it’s still a great, battle-proven library that can go hand-to-hand with modern solutions. On the other hand, selectors are pure functions that depend upon atoms or other selectors to calculate their value, recomputing when any of its dependencies are changed. They can be readable, writable, and even async, integrating nicely with React Suspense. Geist UI is an elegant and beautiful React component library with Geek style, inspired from Vercel design system. NextUI is a beautiful and modern component library powered by Stitches+GeistUI and inspired by Vuesax. Reakit are unstyled components focusing primarily on accessibillity.

Build Accessible Rich Web Apps With React

Workshops & Training I educate organizations about design systems, atomic design, responsive design, strategy, and more. I love helping teams understand the concepts, techniques, and tools used to create successful design systems and establish more collaborative workflows. If you’re interested in having me in to give a one or multi-day workshop at your company, get in touch! Consulting I help organizations create successful design systems and bring great web projects to life.

Rematch

In addition to taking input data (accessed via this.props), a component can maintain internal state data (accessed via this.state). When a component’s state data changes, the rendered markup will be updated by re-invoking render(). Speaking of hook-centric libraries, Hookstate definitely counts as one. This library is focused on providing an excellent development experience using hooks and functional components. The model can then be used to create a Redux store with additional Rematch functionality like shortcut action dispatchers. Speaking of which, no React state management library list would be complete without Redux.

The app’s state dictates what users see, how the app looks, what data is stored, and so on. Thus it’s no wonder that there are so many open-source libraries designed specifically to make state management easier and more enjoyable. The component libraries on this list are accessible and can be styled to match your brand and your design tokens. Rematch builds upon Redux core, simplifying the setup process, reducing boilerplate, and introducing simple side-effects handling with async/await. All that and more fits into just 1.7 kB (vs. 11.1 kB of Redux Toolkit).

The best choice is to stay with the basics until you need something more powerful. Then, explore the options – from the lightweight ones like Zustand to those with the most features and best suit for the job like Redux or Recoil. Add to all that a good extension system, TypeScript and Redux DevTools support, and Hookstate looks to be one of the most attractive solutions for fans of React hooks. At the heart of Rematch are models, which wrap state, reducers, and effects into a single entity.

OpenReplay is the only open-source alternative currently available. Weighting under 1 kB, Zustand is the smallest state management library on this list. With that said, don’t let the small size mislead you – Zustand’s simple, minimalistic API can achieve a lot if used properly.