Что передается в dispatch в Redux

Ответ

В dispatch передается action — объект, который описывает изменение состояния. Action должен иметь поле type (строка, описывающая тип действия). Остальные поля — опциональны и содержат данные для обновления состояния.

Пример:

const incrementAction = {
  type: 'INCREMENT',
  payload: 1
};

dispatch(incrementAction);

Также можно передавать action creator — функцию, которая возвращает action:

const increment = (amount) => ({
  type: 'INCREMENT',
  payload: amount
});

dispatch(increment(5));

В Redux Thunk можно передавать функцию, которая получит dispatch и getState:

const asyncIncrement = () => (dispatch) => {
  setTimeout(() => dispatch(increment(1)), 1000);
};

dispatch(asyncIncrement());

Ответ 18+ 🔞

Да ты посмотри, какая хуйня творится! Ну вот, сидишь ты, пишешь свой код, и тут тебе надо состояние поменять. А как, спрашивается? Правильно, через dispatch! Туда ты суёшь action — это такой объект, который кричит всему миру: «Эй, мудаки, я хочу вот это изменить!».

Главное, чтоб у этого объекта было поле type — обычная строка, название твоего желания, типа 'ПРИБАВЬ_СЧЁТ' или 'УБЕРИ_ЭТУ_ХУЙНЮ'. А остальное — уже по желанию, туда данные пихаешь.

Вот смотри, пример, чтоб не быть мудаком:

const incrementAction = {
  type: 'INCREMENT',
  payload: 1
};

dispatch(incrementAction);

Видишь? type есть — и всем пизда, редьюсер его схватит и сделает что надо.

А ещё можно не париться и создать action creator — это такая функция, которая тебе этот объект и сконструирует. Чисто для красоты, чтоб не писать одно и то же.

const increment = (amount) => ({
  type: 'INCREMENT',
  payload: amount
});

dispatch(increment(5));

Всё, отправили пятёрку, и счётчик подрос. Красота, ёпта!

Но это ещё цветочки. А вот если ты, сука, хочешь сделать что-то асинхронное — типа запрос на сервер сделать, а потом уже состояние обновить? Вот тут-то и вылезает Redux Thunk, эта мартышлюшка хитрая. Он позволяет тебе в dispatch запихнуть не просто объект, а целую функцию! И эта функция получит на вход dispatch и getState, и может творить что хочет.

const asyncIncrement = () => (dispatch) => {
  setTimeout(() => dispatch(increment(1)), 1000);
};

dispatch(asyncIncrement());

Представляешь? Ты вызвал dispatch, а он тебе говорит: «Погоди, браток, я через секунду сам всё сделаю». И через секунду — бац! — состояние обновилось. Волшебство, блядь, да и только. Главное — не перепутай, где объект, а где функция, а то будет тебе чих-пых в сраку от ошибок.