如何处理redux的对象冻结

时间:2017-01-24 13:30:28

标签: json object redux freeze

关于redux - >在开发模式中,我想"冻结"减速器完成工作后和订户收到通知之前的对象状态......

我的方法是为"冻结"定义中间件。对象的状态(例如,使用节点模块deep-freeze-strict)。

但似乎这不是正确的做法。由于订户在冻结之前收到更新状态......

是否有人知道如何在通知订阅者之前定义此类冻结?

2 个答案:

答案 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#LintingRedux addons catalog部分。