foundation
Actions
Моделируйте события как сериализуемые описания произошедшего, а не как команды прямой мутации.
Actions — простые объекты о том, что произошло: `{ type: 'todos/toggle', payload: id }`. Это публичный API записи: сериализуемый, логируемый, воспроизводимый. Redux Toolkit `createSlice` генерирует action creators автоматически.
// Action из RTK slice
const todosSlice = createSlice({
name: 'todos',
initialState: [],
reducers: {
toggled(state, action) {
const todo = state.find((t) => t.id === action.payload);
if (todo) todo.done = !todo.done;
},
},
});
// dispatch(todosSlice.actions.toggled('t1'))
Типы actions именуйте с префиксом фичи (`feature/event`), чтобы избежать коллизий. Async-сценарии шлют несколько actions: pending, fulfilled, rejected — или делегируют RTK Query.
На интервью: actions — события, а не императивные setState с скрытыми побочными эффектами.
Типовые ошибки: несериализуемый payload (функции, promises), строковые типы без констант, «толстые» actions с целым ответом сервера, когда нормализация — задача reducer.
Чеклист:
- Сериализуемые type + payload.
- Именованные пространством типы.
- createAction/createSlice для ergonomics.
- Разделяйте намерение (action) и переход (reducer).