React Flux - 无法在调度中间发送

时间:2015-10-29 14:59:43

标签: javascript reactjs reactjs-flux flux

我有一个列表下拉列表。单击列表时,它将显示在页面另一侧的表格中。

每当创建一个新列表时,我想显示它就像它被点击一样(如下面的代码所示)。但是,为了在表格中显示它,我需要调用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

我不知道如何通过调用动作来显示列表。

1 个答案:

答案 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 - >表