Как асинхронно сбросить значения приставки
- Для начала извинения за неоднозначное название. Вопрос, который у меня возник, я действительно запутался, как поставить название. Я открыт для правок. По сути, я использую реактив-редукс, и у меня есть модальный режим, в котором я обновляю некоторое содержимое в базе данных. При обновлении я хочу, чтобы все состояние редуктора по умолчанию и закрытие модального. (Это просто, так как я запускаю функцию при обновлении, которая устанавливает все значения по умолчанию). Однако, при обновлении я хочу закрыть модальное окно и отобразить toastr при обновлении или сообщение об ошибке из ответа. Я настроил компоненты и действия для тостера.
Проблема в том, что toastr не отображает сообщение, потому что прежде чем оно сможет соответствовать постоянному действию из хранилища, редукторы для модального режима уже установлены по умолчанию. Каков наилучший подход для преодоления этого?
Modal.jsx
//update
updateConfig() {
this.props.updateConfigNode(node, latestConfigData); //update action
this.closeModal();
}
closeModal() {
this.props.status(false); //Close modal
this.props.update(''); //Set update action status 'updated or error' to ''
}
Toastr.jsx
componentDidUpdate() {
this.routerConfigNotification(this.props.config); //Getting from store
}
configNotify(config) {
const message = checkForRouterConfigUpdateState(config);
if(message) {
this._addNotificationNormal(message.title, message.type, message.text);
}
}
Utils
export function checkForRouterConfigUpdateState(routerConfig) {
let message = {};
let messageText;
switch (_.get(routerConfig, 'updateStatus')) {
case '_error':
messageText = 'An error has been occurred while updating configuration';
return message = {
mode: 'normal',
title: 'Error',
type: 'info',
status: _.get(routerConfig, 'updateStatus'),
text: messageText
};
case '_updated':
messageText = 'Successfully Updated';
return message = {
mode: 'normal',
title: 'Updated',
type: 'info',
status: _.get(routerConfig, 'updateStatus'),
text: messageText
};
}
}
Я пробовал другие способы обновления жизненного цикла, но ближе всего я был к решению этой проблемы - использовать функцию setTimeout, которая, как я знаю, взломана, и я уверен, что есть способ решения подобных асинхронных проблем. Заранее спасибо.
1 ответ
Является this.props.updateConfigNode(node, latestConfigData)
Обещание? Если так, вы можете поставить closeModal
в then
блокировать так, чтобы он вызывался только после выполнения вашего запроса.
this.props.updateConfigNode(node, latestConfigData).then(() => {
this.closeModal();
});