我有一个列表下拉列表。单击列表时,它将显示在页面另一侧的表格中。
每当创建一个新列表时,我想显示它就像它被点击一样(如下面的代码所示)。但是,为了在表格中显示它,我需要调用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
我不知道如何通过调用动作来显示列表。
答案 0 :(得分:4)
我相信你的Flux错了。
当你在下拉列表中选择一个列表时,你会发送一个动作,比如ListSelectedAction
,它有一个包含列表ID的属性。
你应该有一个商店,比如ListStore
在调度员上注册一个监听器/回调,监听ListSelectedAction
。 ListStore更新其中一个属性,例如currentList
包含ListSelectedAction
中包含的列表ID,并发出一个事件,比如LIST_CHANGED
Table组件侦听LIST_CHANGED
个事件(不是操作),在接收时,从ListStore
currentList
id读取。 (ListStore
作为道具传递给表)
总之,
下拉菜单 - > ListSelectedAction
- > ListStore
- > LIST_CHANGED
- >表
与New Button相同的处理
新按钮 - > NewListAction
- > ListStore
- > List_CHANGED
- >表