React 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

Я не знаю, как отобразить список, кроме как вызвать действие.


person octavian    schedule 29.10.2015    source источник
comment
Без кода сложно сказать. Это ошибка отправки, например, нам может понадобиться ваш файл действий...   -  person François Richard    schedule 29.10.2015


Ответы (1)


Я считаю, что вы неправильно поняли Flux.

Когда вы выбираете список в раскрывающемся списке, вы отправляете действие, скажем, ListSelectedAction, у которого есть свойство, содержащее идентификатор списка.

У вас должен быть магазин, скажем, ListStore, который регистрирует прослушиватель/обратный вызов в диспетчере, прослушивая ListSelectedAction. ListStore обновляет одно из своих свойств, скажем, currentList, с идентификатором списка, содержащимся в ListSelectedAction, и создает событие, скажем, LIST_CHANGED.

Компонент таблицы прослушивает LIST_CHANGED события (не действия) и при их получении считывает из ListStore идентификатор currentList. (ListStore передается как реквизит таблицы)

Таким образом, раскрывающийся список -> ListSelectedAction -> ListStore -> LIST_CHANGED -> Таблица

То же самое с новой кнопкой

Новая кнопка -> NewListAction -> ListStore -> List_CHANGED -> Таблица

person Bruno Grieder    schedule 29.10.2015