【发布时间】:2016-06-23 20:26:27
【问题描述】:
我使用 Flux、React 并且我有组件 Simple 和 Messages:
-
Simple:它是一个通过Action调用API的简单组件。 Action 执行一个 ajax 请求并将结果发送到
jqXHR.done()。简单有一个更改侦听器来等待结果的调度。如果结果为 null,我想使用我的 Messages 组件显示错误,所以我调用我的MessagesAction.addError('My result is null')。 - 消息:显示应用程序错误的组件。该组件有一个更改侦听器,等待显示新消息。它位于我的应用程序的标题中。
当我收到 null 结果并立即在 Simple 组件中调用 MessagesAction.addError 时会出现问题。事实上,我知道这会导致“Dispatch in the middle of a dispatch”错误,但我不知道如何重构这段代码以使用 Flux 显示错误消息。
免责声明 1:我无法使用 setTimeout 函数来解决此问题。这不是正确的解决方案。
免责声明 2:Simple 组件代表应用程序中将使用 Messages 组件显示消息的任何其他组件。
简单代码:
findUser: function (value) {
UserAction.find(value);
},
componentDidMount: function () {
UserStore.addChangeListener(this.updateUser);
},
updateUser: function(){
var user = UserStore.getUser();
if (user == null){
MessagesAction.addError('My result is null!'); //here occur the error!
} else {
//set my user with setState
}
},
消息代码:
componentDidMount: function () {
MessagesStore.addChangeListener(this.addMessage);
},
addMessage: function () {
this.setState({
messages: MensagensStore.getMessages()
});
},
谢谢!
【问题讨论】: