Инструменты: Reactjs 0.14.0, React-Router 1.0.0, Vanilla Flux.
Итак, у меня есть действие, отправляемое в хранилище в моем componentWillMount, и теперь оно выдает ошибку:
"Неперехваченная (в обещании) ошибка: нарушение инварианта: Dispatch.dispatch(...): не удается выполнить отправку в середине отправки"
Вся моя диспетчеризация должна была быть выполнена за годы до того, как был сделан этот вызов, но в конце концов я понял, что мой окончательный emitChange() не вернется, пока, по-видимому, не будет вызван весь повторный рендеринг emitChange().
Например, потоки кода 1-4:
1) Я меняю состояние в InitStore, что InitComplete
теперь верно
InitStore.js
case ActionTypes.INIT_COMPLETE:
_initComplete();
InitilizationStore.emitChange();
// Not getting past here till all re-rendering was done
break;
2) Теперь это вызовет изменение рендеринга
app.js
if(this.state.initComplete) {
return (
<Main />
);
}else{
return (<div className="main-container">Loading...</div>);
}
3) В дочернем компоненте Main
будет вызов для сохранения параметра маршрута в componentWillMount
Threadlist.js
componentWillMount: function(){
var { threadID } = this.props.params
ThreadActionCreators.setCurrentThread(threadID);//Invariant!!!No!!
},
4)Но похоже InitStore до сих пор не вернулся из emitChange()
!
Вопрос. Значит, вообще не следует обновлять хранилища в компонентеWillMount?
setTimeout
;-) 18.11.2015batchedUpdates
; см. эту страницу и этого теста для примера. 18.11.2015