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

cap*_*ian 5 javascript reactjs redux react-redux

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

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

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

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

考虑下一个例子:

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

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

Run Code Online (Sandbox Code Playgroud)

Art*_*kin 2

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

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

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

最后,React context 只是一种将某些内容隐式深入到组件树中的方法,而不是更多,也不是更少。React context 实际上不是存储某些东西,而是提供消费某些东西。你不会将东西存储在上下文中,而是将其存储在其他地方,也许是状态,也许是某个地方,然后将其提供给消费者。那么,为什么不在消费者需要的时候提供功能呢?它与通过 props 传递东西有什么不同(其中传递函数肯定不是反模式)?

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