更新
感谢@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
})
在这种情况下,我想根据全局状态的另一部分来改变条目状态;redux-router 提供的路由器状态,例如实现分页。
我怎么能做这样的事情?
// 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
安装之前使用一些转换中间件在路由组件上调用静态方法,因此获取数据,然后将调用分页操作创建者;不是想要的行为。 - 收听其他地方的路由器操作(即专用的路由器 redux module),在条目存储上调用动作创建者,但我不确定这与 redux-router 的匹配程度,或者我如何访问路由器的路由器部分全球商店。
- 根本不要这样做;只需在静态 fetchData 方法中查询路由器状态
其他有用的信息;
有问题的实现是 Universal App 深受 react-redux-universal-hot-example 启发
相关部门
- react 0.14.2
- 还原 3.0.3
- react-router 1.0.0-rc3
- redux-路由器 1.0.0-beta3
我怎样才能实现这种或类似的行为?我什至以正确的方式思考这个问题吗?