ZUSTAND


Легковесное управление состоянием

Современные React-приложения часто нуждаются в эффективных инструментах для управления состоянием. При разработке сложных интерфейсов важно, чтобы состояние было доступно и легко контролируемо. Одним из самых простых и мощных решений является Zustand. Эта легковесная библиотека управления состоянием набирает популярность среди разработчиков благодаря интуитивному API и высокой производительности.

Что такое Zustand?

Zustand (нем. "состояние") — это библиотека управления состоянием для React, созданная с акцентом на простоту и эффективность. В отличие от громоздких решений, таких как Redux, Zustand не требует сложной настройки и лишен избыточного кода. Вместо этого он предлагает минималистичный подход к управлению состоянием, при этом обладая гибкостью для масштабных приложений.

Основные возможности и концепции Zustand

1. Простой API

Zustand позволяет быстро создать глобальное хранилище с помощью функции create. Хранилище можно легко использовать в компонентах React для чтения и обновления состояния.

2. Отсутствие бойлерплейта

Одной из главных особенностей является отсутствие сложной конфигурации и шаблонного кода. Создание и использование хранилища максимально простое, что сокращает время на разработку.

3. Селекторы состояния

Вы можете использовать селекторы для извлечения только необходимых данных из хранилища, что улучшает производительность за счет оптимизации перерисовок компонентов.

4. Поддержка React Suspense

Zustand прекрасно интегрируется с React Suspense, упрощая работу с асинхронными данными и делая код более понятным.

5. Асинхронные действия

Хранилище может содержать как синхронные, так и асинхронные действия. Это полезно для работы с API и выполнения других задач, требующих асинхронного поведения.

Преимущества использования Zustand

1. Минимальный размер

Библиотека занимает всего несколько килобайт, что делает её одной из самых легковесных среди инструментов управления состоянием. Это особенно важно для оптимизации производительности приложения.

2. Гибкость

Zustand легко адаптируется под проекты любой сложности. Вы можете использовать его для небольших компонентных состояний или же строить масштабные системы с глобальным состоянием.

3. Простота использования

Создание и использование хранилища в Zustand предельно простое. Даже если вы новичок, разобраться с ним будет легко, поскольку отсутствуют сложные концепции и структура.

4. Поддержка TypeScript

Zustand имеет отличную поддержку TypeScript, что делает его удобным для использования в типизированных проектах. Это обеспечивает дополнительную безопасность кода и улучшает разработку в больших командах.

5. Управление состоянием без лишних перерисовок

Zustand оптимизирует ререндеры, используя селекторы и подписки, что обеспечивает высокую производительность даже в крупных приложениях.

Какие проблемы решает Zustand?

1. Сложность и бойлерплейт Redux

Многие разработчики избегают Redux из-за его громоздкости и сложной конфигурации. Zustand решает эту проблему, предлагая простой и минималистичный подход, который делает управление состоянием гораздо более удобным.

2. Необходимость в легковесном решении

Когда вам нужно управлять глобальным состоянием, но вы не хотите добавлять в проект тяжелые библиотеки, Zustand становится отличным выбором. Он прост в использовании и при этом мощный.

3. Сложные подписки и селекторы

В отличие от других библиотек, которые сложно управляют подписками, Zustand предлагает удобный способ работать с селекторами. Это упрощает оптимизацию ререндеров компонентов.

Пример использования Zustand

Пример использования Zustand для корзины товаров, где данные корзины сохраняются в localStorage. В этом примере, создается Zustand-хранилище, которое будет управлять состоянием корзины и сохранять его между сессиями.


import create from 'zustand';
import { persist } from 'zustand/middleware';

// Определите типы для элементов корзины и состояния
interface CartItem {
  id: number;
  name: string;
  price: number;
  quantity: number;
}

interface CartState {
  cart: CartItem[];
  addToCart: (item: CartItem) => void;
  removeFromCart: (id: number) => void;
  clearCart: () => void;
}

//Создание хранилища Zustand с помощью типизации и использования persist middleware
const useCartStore = create(
  persist(
    (set) => ({
      cart: [],
      addToCart: (item: CartItem) =>
        set((state) => ({
          cart: [...state.cart, item],
        })),
      removeFromCart: (id: number) =>
        set((state) => ({
          cart: state.cart.filter((item) => item.id !== id),
        })),
      clearCart: () => set({ cart: [] }),
    }),
    {
      name: 'cart-storage', // Имя ключа в локальном хранилище
    }
  )
);

export default useCartStore; 

В этом примере:

  • Мы создаем Zustand-хранилище с помощью функции create и добавляем middleware persist, который сохраняет состояние в localStorage под ключом cart-storage.

  • Метод addToCart добавляет товар в корзину.

  • Метод removeFromCart удаляет товар из корзины по идентификатору.

  • Метод clearCart очищает корзину.

Теперь при добавлении товара состояние корзины сохраняется даже при обновлении страницы.


Идеальный выбор для проектов, в которых важны простота, производительность и возможность работы с персистентными данными. С Zustand я могу легко управлять состоянием, создавать интуитивный и лаконичный код, избегая сложных и громоздких настроек. Это делает Zustand идеальным инструментом для современных приложений, где нужны легкость и гибкость.

Назад