更新
感谢@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
方法,因此获取数据,然后将调用分页操作创建器;不是理想的行为。其他有用信息;
有问题的实施是Universal App受react-redux-universal-hot-example
的启发相关代表
我如何实现这种或类似的行为?我是否以正确的方式思考这个问题?
答案 0 :(得分:8)
回到过去,在开发人员事情变得简单之前,人们会听历史对象上的popstate事件;)
看起来行动所需的信息是什么?
<script>
$(document).ready(function()
{
$('.check').change(function()
{
var totalPrijs=0;
$('.check').each(function () {
if (this.checked) {
totalPrijs+=parseInt($(this).val());
}
});
$("#output").text(totalPrijs);
});
});
</script>
和行动:
history.listen((error, nextRouterState) => {
...
store.dispatch(routerDidChange(nextRouterState));
请尝试检查export function routerDidChange(state) {
return {
type: ROUTER_DID_CHANGE,
payload: state
};
}
。
但是你的switch语句使用的是action.payload
而不是action
,因此有一些可疑的东西......你也不需要action.type
- 请参阅http://redux.js.org/docs/basics/Reducers.html