Одним из решений было бы передать логику API в стуком с использованием промежуточного программного пакета, такие redux-thunk (или аналогичный).
Использование thunks позволяет обрабатывать специальные виды actions
как функции, что означает, что вы можете распространять простое действие с помощью конкретной логики, связанной с действием. Пример, который вы даете, чтобы сериализовать свое состояние, является прекрасным вариантом использования для decux-thunk.
Следует отметить, что, в отличие от редукторов, thunks явно поддерживают выборку состояния и отправляют последующие действия через функции getState
и dispatch
.
Ниже приведен пример ES6 того, как может выглядеть такой многоцелевой удар.
Для демонстрации метода getState()
новый элемент будет сохранен только через api, только если состояние редукции shouldSave
является правдивым.
Я бы также использовал синтаксис async/await
, чтобы убедиться, что вызов api завершен до диспетчеризация локального действия redux.
Thunk Пример - добавление нового элемента
import api from './api'
export const addNew = async (item) => {
return (dispatch, getState) => {
try{
const state = getState()
if(state.shouldSave){
await api.save(item)
}
dispatch({
type: ITEM_ADD_NEW,
data: item
})
}catch(err){
const error = new Error("There was a problem adding the new item")
error.inner=err
throw(error)
}
}
}
Да, предпочтительно. Вы можете добавить комментарий к магазину redux сразу после отправки формы и отправки запроса на бэкэнд. Если он успешно сохранен, вы добры. Если по какой-либо причине запрос не срабатывает, вы можете рассмотреть визуальное уведомление для пользователя, сообщившего ему об этом, - например, «Вы не подключены к Интернету» ... Итак, отправляйте запрос, когда это необходимо, и когда это имеет смысл! :) Нет общего правила здесь ... – Andreyco