对观察对象未观察到的属性内的变化做出反应

时间:2017-01-02 09:04:44

标签: mobx mobx-react

我的应用程序商店的观察变量中有一个带有TypeScript类实例的外部库:

class Store:
    @observable active_obj:ExternalClass;

此实例有一个方法,在调用时,更新其内部状态,保留对象:

store.active_obj.change()

现在,由于Mobx没有观察到这个对象本身,也没有观察它(我假设)属性,只是直接在字段active_obj上发生了变化(就像分配给它的新值)。由于MyClass的实例是由外部库提供的,并最终在这个库的组件中呈现,因此我无法将observable和观察者添加到其类结构中,也不能添加React组件。请注意,这只是我认为更改对象属性不会触发重新渲染的原因......

我不得不通过使用其他观察到的变量来作弊,我直接用无意义数据更改,同时我调用未观察到的实例进行更改。在树上方的组件上添加对此变量的引用,我可以触发重新呈现,从而在外部库的(不可观察的)组件上产生更新。

我的问题是,如何让Mobx了解更改,以便通知观察者store.active_obj实例?

我认为Mobx文档的这一部分对此有所警告,但没有解决方法或解决方案:

  

**如果喜欢对象而不是字符串,并且它们是由自己的Like组件呈现的,则Likes组件不会为特定类似内容发生的更改而重新渲染。

from here, at end of the page

修改

根据@ mweststrate的提问,我提供了一些背景信息:

  • 我的应用程序控制其数据,但必须从该
  • 创建外部类实例
  • 实例的数据被封装和变异,但它是通过我的应用程序通过用户触发的事件询问(意思是,我知道数据更新时)来完成的。
  • 基本上,类使用应用程序的数据根据​​用户选择提供不同的数据视图,并使用其React组件呈现它
  • 在我控制的组件
  • 中的应用程序的其他位置使用此更改的数据
  • 更改的数据是外部类'内部的一部分,我不能依赖它
  • 由于Mobx跟踪它可以看到的突变,因此使用Observable并不直接工作

我想到了一些可能的解决方案:

  • 手动通知观察者当我调用它引用的实例时,可观察的active_object已经改变
  • 有一个Mobx可以跟踪的容器对象,当我更改其sentinel属性时,会注意到该更新并使用它实际实例

0 个答案:

没有答案