我处于一种不寻常的情况: 在页面加载时,假设我的Redux商店获得了基本值的保湿:
{ foo: true }
在reducer中,我使用react-router-redux
(或任何其他自行调度操作的库,只提供对操作类型的访问权限)来更新LOCATION_CHANGE
类型操作的状态:
...
case LOCATION_CHANGE: {
const deserialized = deserialize(action.payload.query, **foo**);
return { ...state, deserialized };
}
...
我的deserialize
函数需要foo
的值来相应地更新我的状态。通常,我会将getState().foo
添加到我的操作有效负载中,但由于这是第三方库,因此我无法控制操作负载。是否有一个简单的解决方法来解决这个问题,不要求我撕掉第三方库?
答案 0 :(得分:1)
是的,使用Redux中间件来转换操作。
您可能需要查看some of the existing middleware for intercepting and modifying dispatched actions。
答案 1 :(得分:1)
我接受了markerikson的answer,但这是我最后写的中间件:
const locationChangeMiddleware = store => next => action => {
if (action.type === LOCATION_CHANGE) {
const { foo } = store.getState();
return next({
...action,
payload: {
...action.payload,
foo,
},
});
}
return next(action);
};
现在我的减速机看起来像:
...
case LOCATION_CHANGE: {
const deserialized = deserialize(action.payload.query, action.payload.foo);
return { ...state, deserialized };
}
...