我有一个下拉列表。单击列表后,该列表将显示在页面另一侧的表格中。
每当创建新列表时,我都希望显示它就像单击它一样(如下面的代码所示)。但是,为了在表中显示它,我需要调用ListAssignmentsStoreActions.loadListAssignments(list);
。
handleClick: function() {
var list = this.props.data;
ListAssignmentsStoreActions.loadListAssignments(list);
},
//invoked after initial rendering
componentDidMount: function() {
var loadAssignmentsForList = this.props.loadAssignmentsForList;
console.log("Name " + this.props.data.name);
if(loadAssignmentsForList){
this.handleClick();
}
}
问题是我得到:
error = Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. at invariant
除了调用动作外,我不知道如何显示列表。
最佳答案
我相信您误解了Flux。
当您在下拉列表中选择一个列表时,您将调度一个动作,说ListSelectedAction
,它具有保存列表ID的属性。
您应该有一个商店,例如ListStore
,它在调度程序上注册一个侦听器/回调,侦听ListSelectedAction
。 ListStore使用currentList
中包含的列表ID更新其属性之一,例如ListSelectedAction
,并发出一个事件,例如LIST_CHANGED
Table组件侦听LIST_CHANGED
事件(不是操作),并且在接收到它时,从ListStore
id读取。 (currentList
作为prop传递给Table)
综上所述,
下拉菜单-> ListStore
-> ListSelectedAction
-> ListStore
->表
与“新按钮”相同
新建按钮-> LIST_CHANGED
-> NewListAction
-> ListStore
->表