我正在尝试unstated
(https://github.com/jamiebuilds/unstated(,喜欢它的简单性,但遇到了意外的行为。 在顶级,我有:
<Provider>
<Subscribe to={[MyDataContainer]}>
{myDataStore => (
<TopLevelComponent dataStore={myDataStore} />
)}
</Subscribe>
</Provider>
然后沿着我的组件树向下,我再次使用如下方式访问商店:
<Subscribe to={[MyDataContainer]}>
{myDataStore => (
<Leaf dataStore={myDataStore} />
)}
</Subscribe>
只要我的树保持不变,这就可以很好地工作。 一旦我有需要重建叶子的状态更改,我的数据容器中的状态对象就会重新初始化并清除。 我做错了什么?
您可以通过两种不同的方式解决此问题:
- 公开
Container
的实例而不是类。 - 实例化容器并将其注入
<Provider>
中。
在第一个选项中,实例在每个import
上都保持不变,您将拥有<Subscribe to={[instance]}>
。未说明的文档
在第二个中,您可以执行<Subscribe to={[ContainerClass]}>
但 Unstated 将尝试解析是否存在通过<Provider>
注入的该类的实例并使用该实例而不是重新实例化。未声明的 doc
我通过将Provider
移动到App
级别来解决此问题,高于任何接收/re-renders 的组件props
。