是否可以在redux存储中存储Class的函数和实例?

时间:2017-10-12 02:02:21

标签: reactjs redux react-redux

我想知道什么可以存储,什么不能存储在redux存储中,以及为什么不能存储无法存储的内容。

我听说我不应该存储Class的实例,因为它们不容易序列化(...?)

这样的功能怎么样?

function person(firstName, lastName) {
    let _firstName = firstName;
    let _lastName = lastName;

    return {
        fullName: `${_firstName} ${_lastName}`
    }
}

另外,我想知道我是不是应该存储Class的实例,为什么redux建议将immutable.js对象存储到redux存储中,尽管immutable.js对象是具有许多方法的Class的实例?

更新

扩展immutable.js Record的类的实例怎么样?

1 个答案:

答案 0 :(得分:3)

Redux商店应该是' 单一的事实来源'为申请。它是应用程序的所有状态应该驻留的位置。任何可以存储为组件state的类型都可以存储在Redux中。

您的问题似乎包含两个主要部分。

  1. 组件应存储在Redux中吗?。 (我假设通过' Class'你的意思是React组件)简短的答案是没有。组件可以分为两部分,标记(和方法中的关联逻辑)和组件的状态。一旦创建了Component,Component的标记和相关逻辑将永远不会改变。正是组件的状态不断变化以及将此状态应用于组件,组件的标记也会相应地更改。如果我们能够获得Component的状态,我们可以将它应用于Component并获得必要的标记。因此,将组件存储在Redux中将没有任何好处,因为我们只加载一次它永远不会改变。

    就Immutable.js对象的实例而言,它们通常是表示Component状态的对象。因此,它们是应该存储在Redux商店中的主要示例。

    编辑:关于Immutable.js记录,它们是普通json对象的不可变版本,其形状不能被篡改。它们用于表示组件的状态,并且通过设计是不可变的;这将使它们成为存储在Redux中的理想选择,因为我们不应该改变存储在Redux中的状态

  2. 功能是否应存储在Redux中?答案是。函数是纯逻辑,应用于输入参数以获得输出。对于相同的输入,理想情况下,函数会提供相同的输出。因此,存储这些函数将毫无用处,因为它们一旦创建就永远不会改变。

    您问题中的函数将始终为同一输入提供相同的输出。因此,不建议存储该功能;而是建议将输入值存储在Redux中并将它们应用于函数以获得输出。