---
title: Управление состоянием
seo:
  title: Управление состоянием — React Developer
  description: "Тема «Управление состоянием» для собеседования React Developer. Какие популярные библиотеки для управления состоянием вы знаете, помимо встроенного useState? Какие паттерны использования Redux вы знаете?"
---

[Все темы React Developer](/react-developer)

## <strong>Какие популярные библиотеки для управления состоянием вы знаете, помимо встроенного</strong> <code>useState</code><strong>?</strong> [#q-14bee738d69b8141a19bcb62066ead20]

Популярные библиотеки для управления состоянием в React&#58;

{/* prettier-ignore */}
1. <code>Redux</code>&#58;

    - Централизованное хранилище состояния с предсказуемым поведением.

    - Пример использования&#58;

        ```javascript
        import { createStore } from 'redux';
        import { Provider } from 'react-redux';
        ```

1. <code>MobX</code>&#58;

    - Реактивное управление состоянием с фокусом на наблюдаемых данных и реакциях.

    - Пример использования&#58;

        ```javascript
        import { observable } from 'mobx';
        import { observer } from 'mobx-react';
        ```

1. <code>Recoil</code>&#58;

    - Recoil использует атомы и селекторы, но его репозиторий архивирован в январе 2025 года. Это исторический пример, а не рекомендация для нового проекта.

    - Пример использования&#58;

        ```javascript
        import { RecoilRoot, atom, useRecoilState } from 'recoil';
        ```

1. <code>Zustand</code>&#58;

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

    - Пример использования&#58;

        ```javascript
        import { create } from 'zustand';
        ```

1. <code>Context API</code>&#58;

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

    - Пример использования&#58;

        ```javascript
        import { createContext, useContext } from 'react';
        ```

Помимо встроенного <code>useState</code>, для управления состоянием в React популярны библиотеки Redux, MobX, Recoil, Zustand, а также встроенный Context API.

:::note[Ссылки для изучения]

1. [Управление состоянием в React](https://medium.com/nuances-of-programming/%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B2-react-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-1ae26cab1830)
   :::

---

## <strong>Какие паттерны использования</strong> <code>Redux</code> <strong>вы знаете?</strong> [#q-14bee738d69b81ad83b2ea21d27219b5]

Паттерны использования <code>Redux</code>&#58;

{/* prettier-ignore */}
1. <strong>Действия (</strong><code>Actions</code><strong>)</strong>&#58;

    - Описывают изменения состояния через типы и полезную нагрузку.

    - Пример&#58;

        ```javascript
        const increment = () => ({ type: 'INCREMENT' });
        ```

1. <strong>Редьюсеры (</strong><code>Reducers</code><strong>)</strong>&#58;

    - Функции, которые описывают, как состояние изменяется в ответ на действия.

    - Пример&#58;

        ```javascript
        const counter = (state = 0, action) => {
          switch (action.type) {
            case 'INCREMENT':
              return state + 1;
            default:
              return state;
          }
        };
        ```

1. <strong>Хранилище (</strong><code>Store</code><strong>)</strong>&#58;

    - Хранит состояние приложения и предоставляет методы для доступа к состоянию и отправки действий.

    - Пример&#58;

        ```javascript
        import { createStore } from 'redux';
        const store = createStore(counter);
        ```

1. <strong>Контейнерные компоненты (</strong><code>Container Components</code><strong>)</strong>&#58;

    - Соединяют компоненты React с Redux-хранилищем с помощью <code>connect</code>.

    - Пример&#58;

        ```javascript
        import { connect } from 'react-redux';

        const mapStateToProps = (state) => ({ count: state });
        const mapDispatchToProps = { increment };

        export default connect(mapStateToProps, mapDispatchToProps)(CounterComponent);
        ```

1. <code>Thunk Middleware</code>&#58;

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

    - Пример&#58;

        ```javascript
        import { thunk } from 'redux-thunk';
        import { applyMiddleware, createStore } from 'redux';

        const store = createStore(rootReducer, applyMiddleware(thunk));
        ```

1. <strong>Селекторы (</strong><code>Selectors</code><strong>)</strong>&#58;

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

    - Пример&#58;

        ```javascript
        const getCount = (state) => state.counter;
        ```

Популярные паттерны использования Redux включают действия, редьюсеры, хранилище, контейнерные компоненты, thunk middleware и селекторы. Эти паттерны помогают структурировать и управлять состоянием приложения эффективно.

:::note[Ссылки для изучения]

1. [Управление состоянием в React](https://medium.com/nuances-of-programming/%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B2-react-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-1ae26cab1830)
   :::

---

## <strong>Какие альтернативы</strong> <code>Redux</code> <strong>для управления состоянием в React-приложениях?</strong> [#q-14bee738d69b81a0be51c85c58df6c04]

Альтернативы <code>Redux</code> для управления состоянием в React-приложениях&#58;

{/* prettier-ignore */}
1. <code>MobX</code>&#58;

    - Реактивное управление состоянием с акцентом на наблюдаемые данные и автоматические реакции.

    - Пример&#58;

        ```javascript
        import { observable, action } from 'mobx';
        import { observer } from 'mobx-react';
        ```

1. <code>Recoil</code>&#58;

    - Recoil использует атомы и селекторы, но его репозиторий архивирован в январе 2025 года. Это исторический пример, а не рекомендация для нового проекта.

    - Пример&#58;

        ```javascript
        import { RecoilRoot, atom, useRecoilState } from 'recoil';
        ```

1. <code>Zustand</code>&#58;

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

    - Пример&#58;

        ```javascript
        import { create } from 'zustand';
        const useStore = create(set => ({
          count: 0,
          increment: () => set(state => ({ count: state.count + 1 }))
        }));
        ```

1. <code>Context API</code>&#58;

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

    - Пример&#58;

        ```jsx
        import { createContext, useContext, useState } from 'react';
        const MyContext = createContext();
        const MyProvider = ({ children }) => {
          const [state, setState] = useState(0);
          return <MyContext.Provider value={{ state, setState }}>{children}</MyContext.Provider>;
        };
        ```

1. <code>XState</code>&#58;

    - Управление состоянием с использованием конечных автоматов и диаграмм состояний.

    - Схематичный пример старого API XState 4. В XState 5 используют createMachine или setup; useMachine вызывают внутри компонента или пользовательского хука&#58;

        ```javascript
        import { Machine } from 'xstate';
        import { useMachine } from '@xstate/react';
        const toggleMachine = Machine({ /* состояние машины */ });
        const [state, send] = useMachine(toggleMachine);
        ```

1. <code>React Query</code>&#58;

    - Специализируется на управлении состоянием данных, извлекаемых из серверов.

    - Пример для React Query 3; useQuery вызывается внутри компонента или пользовательского хука. В TanStack Query 5 используется объект параметров&#58;

        ```javascript
        import { useQuery } from 'react-query';
        const { data, error, isLoading } = useQuery('data', fetchData);
        ```

Альтернативы Redux для управления состоянием в React-приложениях включают MobX, Recoil, Zustand, Context API, XState и React Query. Эти библиотеки и инструменты предлагают разные подходы и функциональные возможности для управления состоянием.

:::note[Ссылки для изучения]

1. [Управление состоянием в React](https://medium.com/nuances-of-programming/%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B2-react-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-1ae26cab1830)
   :::
