PurpleSchool — курсы программирования онлайн
  • Пути
    • 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Иконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • 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, миграция ради миграции не нужна — обе библиотеки прекрасно справляются со своей работой.

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

    Комментарии

    0

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

    JavaScript Advanced - продвинутые концепции языка и ООП — часть карты развития Frontend, Backend, Mobile

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

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

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

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

    TypeScript с нуля

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

    React и Redux Toolkit

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

    Neovim

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

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

    Картинка поста Vue vs React в 2026: какой фреймворк выбрать для проекта
    Иконка аватараАнтон
    Иконка календаря10 сентября 2026
    VueReactFrontend+ 1middleИконка уровня middle

    Vue vs React в 2026: какой фреймворк выбрать для проекта

    Сравниваем Vue и React в 2026 году: реактивность, Composition API vs хуки, Server Components и Vapor Mode на примерах кода.

    Иконка чипа0
    Иконка глаза38
    Иконка комментариев0
    Картинка поста React useState и useEffect: полное руководство 2024
    Иконка аватараАнтон
    Иконка календаря29 июля 2026
    ReactuseStateuseEffect+ 3juniorИконка уровня junior

    React useState и useEffect: полное руководство 2024

    Разбираем useState и useEffect с нуля: как управлять состоянием и побочными эффектами в React-компонентах с реальными примерами.

    Иконка чипа0
    Иконка глаза1 077
    Иконка комментариев0
    Картинка поста Подписка Claude Pro, Max или API: что дешевле разработчику
    Иконка аватараАнтон
    Иконка календаря08 сентября 2026
    claudeanthropicapi+ 2middleИконка уровня middle

    Подписка Claude Pro, Max или API: что дешевле разработчику

    Подписка Claude Pro (около 20$/мес) закрывает нужды одиночной разработки в чате, а Max и API открывают доступ к Claude Code и агентам — разбираемся, что выгоднее по деньгам.

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