PurpleSchool — курсы программирования онлайн
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Zustand vs Redux: что выбрать для React-проекта в 2025

    Zustand vs Redux: что выбрать для React-проекта в 2025

    Аватар автора Zustand vs Redux: что выбрать для React-проекта в 2025

    Антон Ларичев

    Иконка календаря12 июня 2026
    ReactZustandReduxState ManagementmiddleИконка уровня middle
    Картинка поста Zustand vs Redux: что выбрать для React-проекта в 2025

    Введение

    Управление состоянием — одна из ключевых задач при разработке React-приложений. В 2025 году выбор инструмента всё чаще сводится к двум решениям: проверенный временем Redux (в современной обёртке Redux Toolkit) и минималистичный Zustand. Оба подхода решают одну проблему, но делают это принципиально по-разному.

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

    Архитектурные различия

    Redux построен на идее однонаправленного потока данных и иммутабельности. Действия (actions) описывают, что произошло, редьюсеры — как изменилось состояние. Это даёт предсказуемость, но требует много кода-обёрток.

    Zustand отбрасывает концепцию редьюсеров и действий как обязательную. Хранилище — это просто объект с данными и методами. Подписка на изменения происходит через хук, а ререндер запускается только при изменении выбранной части состояния.

    Создание стора: Redux Toolkit

    import { createSlice, configureStore } from '@reduxjs/toolkit'
    
    // Создаём слайс с начальным состоянием и редьюсерами
    const counterSlice = createSlice({
      name: 'counter',
      initialState: { value: 0 },
      reducers: {
        increment: (state) => {
          // Immer позволяет писать мутабельный код
          state.value += 1
        },
        addBy: (state, action: { payload: number }) => {
          state.value += action.payload
        },
      },
    })
    
    export const { increment, addBy } = counterSlice.actions
    export const store = configureStore({
      reducer: { counter: counterSlice.reducer },
    })
    

    Использование в компоненте:

    import { useSelector, useDispatch } from 'react-redux'
    
    function Counter() {
      // Получаем значение из стора
      const value = useSelector((s: RootState) => s.counter.value)
      const dispatch = useDispatch()
    
      return (
        <button onClick={() => dispatch(increment())}>
          Значение: {value}
        </button>
      )
    }
    

    Создание стора: Zustand

    import { create } from 'zustand'
    
    // Типизируем состояние и методы
    type CounterState = {
      value: number
      increment: () => void
      addBy: (n: number) => void
    }
    
    export const useCounter = create<CounterState>((set) => ({
      value: 0,
      // Методы напрямую меняют состояние через set
      increment: () => set((s) => ({ value: s.value + 1 })),
      addBy: (n) => set((s) => ({ value: s.value + n })),
    }))
    

    Использование:

    function Counter() {
      // Селектор гарантирует ререндер только при изменении value
      const value = useCounter((s) => s.value)
      const increment = useCounter((s) => s.increment)
    
      return (
        <button onClick={increment}>
          Значение: {value}
        </button>
      )
    }
    

    Разница очевидна: меньше файлов, меньше абстракций, нет необходимости в Provider.

    Асинхронные операции

    В Redux Toolkit для асинхронной логики используют createAsyncThunk или RTK Query. Это мощный инструмент с кешированием, инвалидацией и встроенной обработкой состояний загрузки.

    import { createAsyncThunk } from '@reduxjs/toolkit'
    
    export const fetchUser = createAsyncThunk(
      'user/fetch',
      async (id: string) => {
        const res = await fetch(`/api/users/${id}`)
        return res.json()
      },
    )
    

    В Zustand нет встроенных средств для асинхронности — но они и не нужны. Любой метод стора может быть async:

    export const useUser = create<UserState>((set) => ({
      user: null,
      loading: false,
      fetchUser: async (id: string) => {
        set({ loading: true })
        const res = await fetch(`/api/users/${id}`)
        // После запроса обновляем состояние
        set({ user: await res.json(), loading: false })
      },
    }))
    

    Для сложного кеширования с Zustand обычно комбинируют его с TanStack Query.

    Производительность

    Zustand выигрывает в простых сценариях за счёт точечных подписок: ререндерится только тот компонент, чей селектор вернул новое значение. Redux с useSelector работает аналогично, но дополнительные слои (middleware, devtools) создают накладные расходы.

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

    Когда выбрать Redux

    Redux Toolkit стоит брать, если:

    • В команде уже есть опыт с Redux и налаженный workflow
    • Нужны строгие гарантии предсказуемости и аудит изменений
    • Активно используется RTK Query для работы с API
    • Проект большой, с десятками доменов состояния

    Когда выбрать Zustand

    Zustand подходит для:

    • Стартапов и MVP, где важна скорость разработки
    • Средних SPA с локальным состоянием в нескольких сторах
    • Проектов, где сервер-стейт уже закрыт через TanStack Query или SWR
    • Команд, которым важна минимальная кривая входа

    Частые ошибки

    Селектор возвращает новый объект на каждом рендере. В обеих библиотеках это вызывает лишние ререндеры. Используйте shallow или примитивные селекторы.

    // Плохо: новый объект на каждом рендере
    const { a, b } = useStore((s) => ({ a: s.a, b: s.b }))
    
    // Хорошо: два отдельных селектора
    const a = useStore((s) => s.a)
    const b = useStore((s) => s.b)
    

    Хранение серверного состояния в клиентском сторе. И Redux, и Zustand плохо приспособлены для кеширования запросов. Используйте RTK Query или TanStack Query.

    Глобализация всего подряд. Не каждое состояние должно жить в сторе. Локальный useState часто остаётся лучшим выбором.

    Игнорирование иммутабельности в Zustand. Хотя библиотека не заставляет писать иммутабельный код, прямые мутации могут привести к багам подписок.

    Заключение

    В 2025 году нет единственно правильного выбора. Redux Toolkit остаётся отличным решением для крупных корпоративных проектов с устоявшимися практиками. Zustand завоёвывает рынок там, где ценят простоту и скорость.

    Практичный подход: для нового проекта без жёстких требований берите Zustand плюс TanStack Query — это покрывает 90% задач при минимуме кода. Если же у вас уже есть инфраструктура на Redux, миграция ради миграции не нужна — обе библиотеки прекрасно справляются со своей работой.

    Иконка глаза3

    Комментарии

    0

    Постройте личный план изучения Основы Git до уровня Middle — бесплатно!

    Основы Git — часть карты развития Frontend, Backend, DevOps

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Продвинутый JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    TypeScript с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста React Hooks: полный гайд по useState, useEffect, useCallback, useMemo
    Иконка аватараАнтон
    Иконка календаря31 мая 2026
    ReactJavaScriptHooks+ 1middleИконка уровня middle

    React Hooks: полный гайд по useState, useEffect, useCallback, useMemo

    Полный гайд по React Hooks: useState, useEffect, useCallback и useMemo. Разбираем синтаксис, примеры использования и типичные ошибки.

    Иконка чипа+1
    Иконка глаза195
    Иконка комментариев0
    Картинка поста Авторизация и аутентификация в Node.js: JWT, OAuth2 и сессии
    Иконка аватараАнтон
    Иконка календаря11 июня 2026
    Node.jsБезопасностьJWT+ 2middleИконка уровня middle

    Авторизация и аутентификация в Node.js: JWT, OAuth2 и сессии

    Авторизация и аутентификация на Node.js: разбираем JWT, OAuth2 и серверные сессии с примерами кода на Express и рекомендациями по безопасности.

    Иконка чипа0
    Иконка глаза133
    Иконка комментариев0
    Картинка поста Микросервисы vs монолит: как выбрать архитектуру проекта
    Иконка аватараАнтон
    Иконка календаря10 июня 2026
    архитектурамикросервисымонолит+ 2middleИконка уровня middle

    Микросервисы vs монолит: как выбрать архитектуру проекта

    Микросервисы vs монолит — разбираем плюсы и минусы обеих архитектур, показываем примеры кода и помогаем выбрать подход под ваш проект.

    Иконка чипа+1
    Иконка глаза85
    Иконка комментариев0
    Иконка чипа0