首页 > 解决方案 > 是否允许在 React 上下文中存储不可序列化的对象?

问题描述

是否允许在 React 上下文中存储不可序列化的对象?

我无法在文档中找到这个问题的答案

我知道这在 redux 商店中被认为是一种不好的做法,请参见此处

您能否提供有关在上下文中使用不可序列化对象的任何参数或文档链接?

考虑下一个例子:

class A {
 foo=()=> void 0
 bar=()=> void 0
}

const context = React.createContext(new A()) // is this ok ?

标签: javascriptreactjsreduxreact-redux

解决方案


我认为在 React 上下文中存储不可序列化的对象是非常好的。这里有一些论点。

首先,我不知道(如果我错了,请纠正我)任何序列化或反序列化任意上下文和/或假设它是可序列化的内部反应机制。

其次,react context now 是一个稳定的特性(相比之下,它在前一段时间是不稳定的)。这里不太可能发生变化,所以我们不需要主动小心。

最后,react context 只是一种将某些东西隐式传递到组件树的方法,而不是更多,也不是更少。React 上下文实际上不是关于存储某些东西,而是关于提供使用某些东西。您不会将事物存储在上下文中,而是将其存储在其他地方,也许是状态,也许是某处,然后将其提供给消费者。那么,如果消费者需要,为什么不向他们提供功能呢?它与通过道具传递事物有何不同(传递函数肯定不是反模式)?

它更多的是关于具体场景,没有人比你更了解如何以及何时限制特定的上下文形状。例如,在我们的项目中,我们有一些内部的类似 redux 的库,它通过 rpc 调用在电子窗口之间同步存储。它使用上下文,我们特别限制(使用打字稿)上下文形状是可序列化的(以便能够通过 rpc 传输它)。另一方面,我们有很多情况下我们通过上下文传递不可序列化的东西。


推荐阅读