Что такое Redux, зачем он нужен и как устроен
Что проверяют
Понимаете ли вы принципы (единый источник истины, неизменяемость, чистые редьюсеры) и способны ли честно сказать, когда Redux не нужен.
Как отвечать
Redux это предсказуемое хранилище состояния. Один объект состояния на приложение, изменить его можно только отправив действие, а новое состояние вычисляет чистая функция-редьюсер.
Поток односторонний: компонент отправляет действие, редьюсер возвращает новое состояние, подписанные компоненты перерисовываются.
const slice = createSlice({
name: "filters",
initialState: { city: "" },
reducers: { setCity: (s, a) => { s.city = a.payload; } },
});Три принципа: одно дерево состояния, состояние только для чтения, изменения через чистые функции. Отсюда и польза: воспроизводимость, путешествие по истории действий, понятная отладка.
Сегодня пишут на Redux Toolkit: он убирает шаблонный код, включает Immer (мутирующий на вид код превращается в неизменяемое обновление) и даёт createAsyncThunk для запросов.
Честно про уместность: для состояния сервера обычно лучше подходят TanStack Query или RTK Query, они дают кэш, повторные запросы и устаревание из коробки. Для локального состояния хватает useState, для небольшого общего есть Zustand и context. Redux оправдан, когда состояние действительно общее, сложное и его изменения нужно отслеживать.
Где спотыкаются
Кладут в хранилище ответы сервера и вручную пишут то, что уже умеет библиотека запросов.
Мутируют состояние вне Immer и теряют перерисовку.
Пишут редьюсеры с побочными эффектами: запрос внутри редьюсера ломает чистоту.
Не могут объяснить, зачем нужны селекторы и почему подписка на всё состояние вредит производительности.