Реакция / поток: хранение важных параметров во время изменений маршрута
Инструменты: React 0.14.0, React-Router 1.0.0, Vanilla Flux
Из-за обработки события "кнопка назад" - я пытаюсь использовать маршрутизацию, чтобы сохранить важные идентификаторы для рендеринга (например, currentThreadID
).
например - /threads/:currentThreadID
Проблема: поскольку несколько компонентов зависят от currentThreadID, я пытаюсь получить параметры и добавить их в хранилище при открытии маршрута. Проблема в том, что я не могу найти, где в моей программе мне нужно брать текущее местоположение.
Например у меня есть этот маршрут
<Route path='/' component={Main}>
<Route path='home' component={Home} >
<Route path='threads' component={Thread} >
<Route path=':currentThreadID' component={ThreadList} />
</Route>
</Route>
<Route path='login' component={Login} />
</Route>
Когда я вхожу ThreadList
Я пытаюсь получить параметр и добавить его в магазин, чтобы другие компоненты имели к нему доступ.
ThreadList.js
componentWillMount: function(){
var { threadID } = this.props.params
ThreadActionCreators.setCurrentThread(threadID);
},
Попытка установить, что текущий идентификатор вызывает конфликт с диспетчером "Ошибка: нарушение инварианта: Dispatch.dispatch(...): невозможно отправить в середине отправки".
Я полагаю, что это из-за конфликта с React-Router(все остальные мои рассылки уже были закончены).
Вопрос: правильно ли я пытаюсь оплатить состояние currentThreadID? Если да, то как мне вызвать действие для сохранения параметра в моих магазинах?
1 ответ
Некоторое время я не использовал реагирующий маршрутизатор, но я думаю, что вы можете настроить отправку действия в обратном вызове, предоставленном Router.run, для отправки действия изменения маршрута. Затем вы можете настроить свой магазин на получение идентификатора из параметра маршрута при соответствующем изменении маршрута.
Я бы порекомендовал взглянуть на Redux, хотя это усовершенствование архитектуры Flux, а в redux-router встроены действия для такого рода вещей.