DEV Community

Sathish
Sathish

Posted on • Originally published at sathishsaravanan.com

Jotai and Zustand: Modern Alternatives to Redux

Redux has long been the go-to state management library for React developers. While Redux offers predictability and structure, it also comes with significant boilerplate and a steep learning curve. Recently, two libraries—Jotai and Zustand—have emerged as promising alternatives, simplifying state management by reducing complexity and enhancing productivity.

Let's dive into why these two libraries are catching attention and how they might fit into your next React project.

What is Jotai?

Jotai is an atomic state management library for React. Inspired by React's built-in useState, it introduces "atoms" as units of state. Each atom manages its own state independently, ensuring fine-grained control and efficient updates.

Key Features of Jotai:

  • Minimalistic API: Easy to learn, resembling React's native hooks.
  • Atomic State: Each atom represents a piece of state, triggering only relevant component updates.
  • Derived & Async Atoms: Allows composing complex states and integrates smoothly with asynchronous operations.

Practical Example with Jotai:

import { atom, useAtom } from 'jotai';

const countAtom = atom(0);

function Counter() {
  const [count, setCount] = useAtom(countAtom);

  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount((c) => c + 1)}>
        Increment
      </button>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

This concise approach removes Redux's action creators and reducers, simplifying your state logic significantly.

What is Zustand?

Zustand (German for "state") offers a minimalist global state management solution. It provides a centralized store without context providers or Redux-like boilerplate.

Key Features of Zustand:

  • Simplicity: Minimal setup, directly define your store with state and actions.
  • Fast, Selective Updates: Components subscribe only to the necessary parts of the state.
  • Middleware Integration: Supports Redux DevTools and persistence through middleware.

Practical Example with Zustand:

import { create } from 'zustand';

const useStore = create((set) => ({
  count: 0,
  increment: () => set((state) => ({ count: state.count + 1 })),
}));

function Counter() {
  const count = useStore((state) => state.count);
  const increment = useStore((state) => state.increment);

  return (
    <div>
      <p>{count}</p>
      <button onClick={increment}>Increment</button>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Again, no need for Redux providers, actions, or dispatchers—just straightforward state updates.

Comparing Jotai, Zustand, and Redux

Feature Jotai Zustand Redux
Complexity Minimal Minimal High (boilerplate)
API Style Atomic, hook-based Simple global store Actions & reducers
Middleware Limited Built-in support Extensive
Learning Curve Easy Easy Steep
Performance Fine-grained updates Selective updates Requires optimization

Both Jotai and Zustand significantly reduce the boilerplate compared to Redux, offering more intuitive state management aligned closely with React's philosophy.

Real-World Use Cases

Jotai is Ideal When:

  • You prefer fine-grained reactivity, ensuring updates only impact necessary components.
  • You manage component-level states and need atomic, lightweight state handling.
  • Your state logic benefits from simple derived or asynchronous data handling.

Example Scenario:
A complex UI dashboard with multiple independent widgets that each track their own state, such as toggles, forms, and counters. Each widget uses its own atom, updating individually without causing unnecessary re-renders elsewhere.

Zustand Shines When:

  • You need centralized yet simple global state management.
  • Your application has global data (user authentication, global settings) shared widely across components.
  • Middleware features like dev-tools integration or persistence are important.

Example Scenario:
An e-commerce app that manages global cart states, authentication, and theme preferences. Zustand centralizes these states effortlessly, enabling easy subscription from components and clean updates without Redux-style boilerplate.

Redux Still Makes Sense If:

  • You're handling large-scale, enterprise-level applications needing strict state predictability.
  • Your app extensively uses middleware and complex state logic that relies heavily on Redux's mature ecosystem (e.g., sagas, middleware chains, advanced debugging).

Migrating from Redux to Jotai or Zustand

Migration from Redux doesn't have to be daunting. You can gradually replace Redux slices:

  • Identify Redux state slices you want to migrate.
  • Create equivalent atoms (Jotai) or store slices (Zustand).
  • Refactor components incrementally, removing useSelector and useDispatch hooks, replacing them with useAtom or Zustand's store hooks.
  • Once comfortable, remove Redux completely.

Final Thoughts

Both Jotai and Zustand represent modern, lean approaches to state management. They reduce boilerplate significantly, enhance readability, and align perfectly with modern React development practices.

Choosing between these libraries boils down to your project's specific needs:

  • Jotai excels in fine-grained, component-level atomic state management.
  • Zustand suits simple yet powerful global state management needs.
  • Redux remains valuable for complex, enterprise-grade applications needing advanced middleware and strict architectural patterns.

In your next React app, try Jotai or Zustand. You might discover your new favorite way to manage state—light, efficient, and developer-friendly.

Heroku

Built for developers, by developers.

Whether you're building a simple prototype or a business-critical product, Heroku's fully-managed platform gives you the simplest path to delivering apps quickly — using the tools and languages you already love!

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

If this article connected with you, consider tapping ❤️ or leaving a brief comment to share your thoughts!

Okay