关于redux - >在开发模式中,我想"冻结"减速器完成工作后和订户收到通知之前的对象状态......
我的方法是为"冻结"定义中间件。对象的状态(例如,使用节点模块deep-freeze-strict)。
但似乎这不是正确的做法。由于订户在冻结之前收到更新状态......
是否有人知道如何在通知订阅者之前定义此类冻结?
答案 0 :(得分:0)
我的解决方案是定义一个包装reducer的函数:
export function freezeStateOfReducer(reducer): any {
return (state, action) => {
let newState = reducer(state, action);
freezeState(newState);
return newState;
};
}
export const rootReducer = combineReducers({
firstReducer: ...
});
createStore(freezeStateOfReducer(rootReducer));
答案 1 :(得分:0)
实际上,这是一个有趣的问题。在 theory 中,唯一的状态更新应该在reducer中发生。在实践中,我确实看到过人们在mapState
函数中意外改变事物的情况。在中间件看到更新后的状态之前,通知用户是肯定的。
此可能是商店增强器的有效用例,可以确保在实际通知订阅者之前冻结状态。或者,包含普通根减速器的高阶减速器。
此外,现有几个已经存在的“开发中的冻结状态”实用程序。有关这些现有库的列表,请参阅DevTools#Linting的Redux addons catalog部分。