Ответ
В 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, а он тебе говорит: «Погоди, браток, я через секунду сам всё сделаю». И через секунду — бац! — состояние обновилось. Волшебство, блядь, да и только. Главное — не перепутай, где объект, а где функция, а то будет тебе чих-пых в сраку от ошибок.