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, миграция ради миграции не нужна — обе библиотеки прекрасно справляются со своей работой.

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

    Комментарии

    0

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

    Angular — часть карты развития Frontend

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

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

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

    Основы разработки

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    бесплатно
    Подробнее
    изображение курса

    Основы Git

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

    HTML и CSS

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

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

    Картинка поста Как тратить меньше токенов в Claude Code
    Иконка аватараАнтон
    Иконка календаря25 октября 2026
    Claude CodeAnthropicAI-инструментыmiddleИконка уровня middle

    Как тратить меньше токенов в Claude Code

    Чтобы Claude Code тратил меньше токенов, сократите контекст, который он пересылает с каждым запросом, и не ломайте кэш посреди задачи. На практике это пять привычек: `/clear` между несвязанными задачами, `/compact` в паузах, а не посреди работы, Sonnet вместо Opus для повседневного кода, выбор модели в начале сессии, а не на середине, и короткий `CLAUDE.md`. Дороже всего в счёте обходится не длина ваших вопросов, а новый контекст и пересборка кэша — именно их эти привычки и сокращают.

    Иконка чипа0
    Иконка глаза57
    Иконка комментариев0
    Картинка поста Qwen 3.8 Max для кода: как подключить из России
    Иконка аватараАнтон
    Иконка календаря24 октября 2026
    AI-инструментыapiразработкаjuniorИконка уровня junior

    Qwen 3.8 Max для кода: как подключить из России

    Qwen 3.8 Max — флагманская модель Alibaba с контекстом в 1 млн токенов и ответом до 131 тыс. токенов, которую Alibaba позиционирует прежде всего для программирования. Работать с ней из России проще всего в Qwen Code или OpenCode через ключ AI для кода от PurpleSchool: оплата в рублях, без VPN и без аккаунта Alibaba Cloud. Модель подключается по протоколу OpenAI Responses API — ниже готовые конфиги для обоих клиентов, характеристики модели и частые ошибки.

    Иконка чипа0
    Иконка глаза112
    Иконка комментариев0
    Картинка поста Codex не работает: частые ошибки и решения
    Иконка аватараАнтон
    Иконка календаря23 октября 2026
    AI-инструментыapiразработкаjuniorИконка уровня junior

    Codex не работает: частые ошибки и решения

    Чаще всего Codex не работает по одной из четырёх причин: команда `codex` не находится в системе, Codex пытается войти в аккаунт OpenAI, который из России недоступен, неправильно настроен провайдер в `~/.codex/config.toml` или песочница не даёт командам выйти в сеть. Ниже — ошибки по симптомам: что вы видите, почему это происходит и что исправить. В конце — как включить подробный лог, если ни один пункт не подошёл.

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