我的应用商店的观察变量中有一个带有 TypeScript 类实例的外部库:
class Store:
@observable active_obj:ExternalClass;
这个实例有一个方法,当被调用时,它会更新其内部状态,使对象保持原样:
store.active_obj.change()
现在,由于 Mobx 没有观察这个对象本身,也没有观察它的(我假设的)属性,所以只会在 active_obj 字段上直接发生变化(比如分配给它的新值)。由于 MyClass 的实例由外部库提供并最终在该库的组件中呈现,因此我无法将可观察对象和观察者添加到其类结构或 React 组件中。请注意,这只是我认为更改对象属性不会触发重新渲染的原因......
我不得不通过使用其他观察到的变量来作弊,我直接用无意义的数据进行更改,同时我调用未观察到的实例进行更改。在树的上层组件上添加对该变量的引用,我可以触发重新渲染,从而在外部库的(未观察到的)组件上产生更新。
我的问题是,如何最好地让 Mobx 意识到变化,以便它可以通知 store.active_obj 实例的观察者?
我认为 Mobx 文档的这一部分对此提出了警告,但没有解决方法或解决方案:
** 如果喜欢对象而不是字符串,并且如果它们由自己的 Like 组件呈现,则 Likes 组件不会重新呈现特定喜欢内部发生的变化。
编辑
根据@mweststrate 的问题,我提供了一些上下文:
- 我的应用程序控制它的数据,但它必须从中创建外部类的实例
- 实例的数据被封装和变异,但它是通过用户触发事件从我的应用程序端询问来完成的(意思是,我知道数据何时更新)
- 基本上,类使用应用程序的数据根据用户选择提供不同的数据视图,并使用其 React 组件呈现它
- 我还在我控制的组件中的应用程序的其他地方使用这些更改的数据
- 更改的数据是外部类内部的一部分,我不能依赖它
- 由于 Mobx 跟踪它可以看到的突变,因此使用 Observable 不能直接工作
我认为一些可能的解决方案:
- 当我调用它引用的实例进行更改时,手动通知观察者可观察的 active_object 已更改
- 有一个 Mobx 可以跟踪的容器对象,当我更改它的 sentinel 属性时,会注意到该更新并带有它的实际实例