在 redux 存储中存储类的函数和实例可以吗?

5 reactjs redux react-redux

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

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

像这样的函数呢?

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

    return {
        fullName: `${_firstName} ${_lastName}`
    }
}
Run Code Online (Sandbox Code Playgroud)

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

更新

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

pal*_*alm 4

Redux 存储应该是应用程序的“单一事实来源”。这是应用程序的所有状态应该驻留的地方。任何可以作为state组件存储的类型都可以存储在 Redux 中。

您的问题似乎由两个主要部分组成。

  1. 组件应该存储在 Redux 中吗?。(我假设“类实例”指的是 React 组件)简单的答案是否定的。组件可以分为两部分:标记(以及方法中的关联逻辑)和组件的状态。一旦组件被创建,组件的标记和关联逻辑将永远不会改变。组件的状态不断变化,并且该状态应用于组件,组件的标记也会相应变化。如果我们能够获取组件的状态,我们就可以将其应用到组件并获取必要的标记。因此,将组件存储在 Redux 中不会给我们带来任何好处,因为我们只会加载它一次并且它永远不会改变。

    就 Immutable.js 对象的实例而言,它们通常是表示组件状态的对象。因此,它们是 Redux 存储中应存储内容的主要示例。

    编辑:关于 Immutable.js 记录,它们是普通 json 对象的不可变版本,其形状无法篡改。它们用于表示组件的状态,并且在设计上是不可变的;这使得它们非常适合存储在 Redux 中,因为我们不应该改变存储在 Redux 中的状态

  2. 函数应该存储在 Redux 中吗?答案再次是否定的。函数是纯逻辑,应用于输入参数以获得输出。对于相同的输入,函数理想情况下会给出相同的输出。因此,存储这些函数将没有任何用处,因为它们一旦创建就永远不会改变。

    您问题中的函数将始终为相同的输入提供相同的输出。因此,不建议存储该函数;建议将输入值存储在 Redux 中并将其应用到函数中以获得输出。