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

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

09-16 13:42