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).