我可以在 Redux 中存储类实例数组吗?

问题描述 投票:0回答:3

在阅读 Redux 的一个教程时,我遇到了这个警告:“Redux 操作和状态应该只包含简单的 JS 值,如对象、数组和基元。不要放置类实例、函数或其他不可序列化的值进入 Redux!

这是否意味着类实例数组不应该保存在 redux 中?例如,假设我有一个聊天应用程序。假设我有一个 Conversation 类,其中包含参与者数组、消息数组、id 等。我可以向 redux 添加 Conversation 实例数组吗?

如果没有,为什么? React 应用程序的数据模型不应该过多依赖类和继承吗?

reactjs oop redux react-redux
3个回答
4
投票

技术上可以做到这一点,但是你不应该将类实例添加到 Redux 状态! React 和 Redux 都希望您使用纯 JS 对象、数组和原语来表示状态,而不是类实例。

他们还希望您一成不变地更新该数据

您的数据也绝对应该

依赖于继承。


0
投票
ref

):

如果您对持久性和时间旅行调试等可能无法按预期工作的事情感到满意,那么完全欢迎您将不可序列化的项目放入 Redux 存储中。最终,这是您的应用程序,如何实现它取决于您。与 Redux 的许多其他事情一样,请确保您了解其中涉及的权衡。

也就是说,当你使用类作为值对象(这意味着它们是不可变的)并且没有继承时,它并不违背 React 的精神,而且看起来很好。

但是,文档中并不清楚“可以破坏存储内容的持久性和再水合能力”是什么意思。例如,当您使用reducer存储此类的实例,然后使用选择器检索它时,它是否会以某种方式进行转换(我的意思是序列化和反序列化)?如果没有,那就没问题,因为它可以使用。如果是,序列化/反序列化器将不知道如何(反)序列化它,因为 JS 没有任何通用的 Serialized 接口来实现哪个序列化器可以遵循。这样一来,使用类就无法使用了。


-1
投票
普通 JS 值

只是一个普通旧 JavaScript 对象 (POJO): var obj = {};// this is a POJO var obj = new Object();// this is POJO

什么不是 PJOJ,是这样的:

var Obj = function(welcome_text) { this.welcome_text = welcome_text; } var c = new Obj("Welllllcome!!!!");// this is not a POJO !

我跟踪了 redux 的文档,他们在这个
link

中给出了一个例子。他们解释说,例如,您不能将 new Date() 作为操作/状态的参数,因为 new Date() 将返回非 POJO !相反,您应该执行

new Date().toISOString()
,它将返回一个字符串。
因此,回答您的直接问题(

我可以添加到 redux 对话实例数组吗?

是的,你可以

© www.soinside.com 2019 - 2024. All rights reserved.