React redux hook useDispatch function, как я могу вызвать что-то после его завершения
В коде, который я использовал в примере, у меня есть форма свойства для добавления нового свойства, после сохранения его в базе данных я хочу обновить хранилище redux с новым свойством и отправить пользователя на страницу свойств, где перечислены все свойства. но я хочу сделать это после отправки (addProperty(savedProperty)), тогда я могу сделать history.push("/properties"). Как мне там дождаться окончания отправки? Я использую useDispatch из react-redux.
async function handlePropertyFormSubmit(values) {
const savedProperty = await savePropertyGraphQlPromise(values);
if (savedProperty) {
dispatch(reset("property"));//reset property form
dispatch(addProperty(savedProperty));
//here I want to wait the dispatch finish and then send user to the properties page.
history.push("/properties");
}
}
3 ответа
Похоже, вы используете async/await, поэтому вы также можете использовать его для ожидания отправки.
async function handlePropertyFormSubmit(values) {
const savedProperty = await savePropertyGraphQlPromise(values);
if (savedProperty) {
await dispatch(reset("property"));//reset property form
await dispatch(addProperty(savedProperty));
history.push("/properties");
}
}
Если addProperty
действие возвращает обещание (например, преобразователь), вы можете использовать then
метод тоже.
dispatch(addProperty(savedProperty)).then(() => {
history.push('/properties')
})
Вы можете создать "сигнал" своей рассылкой - например, dispatched: false
и установите значение true, когда закончите dispatch
(затем отключите его после перенаправления, если вы собираетесь использовать это свойство в других компонентах). Если вы используете реактивный маршрутизатор, вы можете вместо этого визуализировать<Redirect to="yourNewURL" />
для перенаправления (отображать условно на основе redux store state
).
Оберните вашу вторую отправку с помощью setTimeout, что-то вроде этого firstDispatch() setTimeout(secondDispatch)