Обновление
Благодаря @Dominic Tobias и @gabdallah за то, что я заметил мою неловкую ошибку.
Правильный ответ, конечно,
попробуйте проверить
action.payload
.
Другие комментарии относительно оператора switch и объекта действия мы ссылаемся на ошибки, которые я сделал в моем примере, с которых я с тех пор исправил.
Представьте, что я объединил следующие два редуктора:
import { combineReducers } from 'redux'
import { routerStateReducer } from 'redux-router'
import entries from './entries'
export default combineReducers({
router: routerStateReducer,
entries
})
Я хотел бы изменить состояние записей на основе другой части глобального состояния, в данном случае; состояние маршрутизатора, предоставляемое редукционным маршрутизатором, чтобы, например, реализовать разбиение на страницы.
Как я мог сделать что-то подобное?
// entries.js
import { ROUTER_DID_CHANGE } from 'redux-router/lib/constants'
const initialState = {}
function entries (state = initialState, action) {
switch (action.type) {
case ROUTER_DID_CHANGE:
// How can I access `state.router` here in order to do something like this;
if (routerState.location.pathname === '/entries') {
return {
...state,
page: routerState.location.query.page || state.page,
limit: routerState.location.query.limit || state.limit
}
}
return state
}
}
Некоторые другие подходы, которые приходят на ум;
- подключите состояние маршрутизатора к компоненту маршрута
Entries
, используйте метод жизненного цикла componentWillMount для проверки состояния маршрутизатора и вызовите создателя действия со страницей и значениями предела, которые изменяют состояние записей по очереди. Это сработает; однако я использую переходное промежуточное программное обеспечение для вызова статического методаfetchData
компонента маршрута перед его установкой, поэтому данные получаются, а потом создатель действия подкачки будет вызываться впоследствии; не желаемое поведение. - Слушайте действия маршрутизатора где-то в другом месте (т.е. выделенный модуль редукции маршрутизатора), вызовите создателя действия в хранилище записей, но я не уверен, насколько это подходит для редукционного маршрутизатора или как я получаю доступ к маршрутизатору часть глобального магазина.
- не делайте этого вообще; просто запросите состояние маршрутизатора в статическом методе fetchDatali >
Другая полезная информация;
Реализация, о которой идет речь, - это приложение Universal, сильно вдохновленное реакцией-redux-universal-hot-example
Соответствующие отпечатки
- реагировать 0.14.2
- redux 3.0.3
- response-router 1.0.0-rc3
- redux-router 1.0.0-beta3
Как я могу достичь этого или подобного поведения? Я даже думаю об этом правильно?