如何在 React Redux 应用程序中深度冻结 Redux 状态?

gan*_*alf 3 immutability redux react-redux

我需要使用 Deep-freeze 库深度冻结 React Redux 应用程序中的整个 Redux 状态,以检查状态是否有任何突变。我应该如何使用deep-freeze和react redux应用程序来实现这一点?

Ger*_*rik 5

我假设您的意思是您希望使用深度冻结作为更改的测试工具(因为我不确定您为什么要冻结整个状态)。一直以来都有一些例子。

通常,您将 deep-freeze 与 Expect 一起使用,并专注于您的减速器,因为减速器被赋予一个状态并且它们返回预期状态。

典型的测试通常如下所示(摘自此处):

// a test for the reducer
const testReducer = () => {
    const stateBefore = { value: 'foo' };
    const action = {
        type: 'SET_STATE',
        value: 'bar'
    };
    const stateAfter = { value: 'bar' };

    // cannot modify
    deepFreeze(stateBefore);
    deepFreeze(action);

    expect(store(stateBefore, action)).toEqual(stateAfter);
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以验证所采取的操作不会以任何方式改变您的状态。

Egghead.io 也有一个关于此的精彩视频。

当然,使用不必仅限于测试;如果你愿意的话,我想你也可以在你的代码中引入深度冻结作为断言工具。我个人没有任何这样做的经验。