0

我的应用商店的观察变量中有一个带有 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 属性时,会注意到该更新并带有它的实际实例
4

0 回答 0