С удовольствием, так что здесь у вас есть создатель действия, который возвращает объект действия, и в этом объекте действия у вас есть свойства type
и payload
.
Чтобы иметь возможность превратить вашего создателя действия в того, кто может вернуть функцию вместо объекта действия, вам нужно решить, собираетесь ли вы установить промежуточное программное обеспечение, такое как redux-thunk
, и внести его в микс.
Именно из этой библиотеки мы получаем аргументы dispatch
и getState
, которые мы можем использовать для передачи функции вместо объекта действия от наших создателей действия.
После того, как вы импортировали и установили redux-thunk
, я полагаю, вам придется реорганизовать создателя ваших действий следующим образом:
До:
// Action creator
export const selectSong = (song) => {
// returns an action
return {
type: 'SONG_SELECTED',
payload: song
};
};
После того, как:
export const selectSong = (song) => async dispatch => {
const response = await songsAPI.get("/songs");
dispatch({ type: "SONG_SELECTED", payload: song });
};
Теперь я не знаю, выбираете ли вы песню из внешнего API, но я написал код таким образом, чтобы подчеркнуть, что это то, что вы реализуете, когда вы хотите разрабатывать асинхронные создатели действий, что также использования промежуточного программного обеспечения, такого как redux-thunk
, и таким образом рефакторинг создателя действий, поскольку Redux не выполняет асинхронные запросы из коробки.
Обратите внимание, что я не использую getState
здесь в качестве аргумента, потому что, если он вам не понадобится, тогда, пожалуйста, не определяйте его, но если вы используете VS Code, то должна быть кричащая кривая о том, что вы Я не использовал аргумент, или getState
должно быть затенено, указывая, что вы его нигде не использовали, это подсказка, его высказывание не указывайте, если вы не собираетесь его использовать.