【发布时间】:2016-11-04 23:43:41
【问题描述】:
我设置了一个新的示例/样板项目,用于测试使用 Meteor 和 React 和 MobX(使用 Mantra 架构)。该项目在https://github.com/markoshust/mantra-matui-mobx
我遇到了一个问题,即 State.header.title 属性的状态更改未正确反映重新渲染时更新的状态更改。
我的状态是通过拉入简单的对象来构建的: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/stores/route.js
进入一个主可观察对象: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/main.js#L8
我正在列出路线更改并调用操作来更新状态: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/reactions/route.js#L10
此操作更新状态: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/actions/route.js#L5
控制台正在注销正确的状态更改,因此状态正在正确更新。但是,组件没有以更新的状态重新渲染(这一行是 console.log'ing old state val): https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/containers/Header.js#L6
我看到“正在更新...”消息,因此该组件正在重新渲染,但它似乎仍处于旧状态。我确实将observer 添加到我的所有反应组件中:
https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/components/Header.js
【问题讨论】:
-
我似乎已经用自定义的 withMobx 作曲家解决了这个问题,它唯一要做的就是等待下一个滴答声来渲染组件。知道为什么这会解决它吗? Mobx 应该是同步的。 github.com/markoshust/mantra-matui-mobx/blob/master/client/…
-
我认为
State.header是可观察的,但不是State.header.title。 -
试过了,没有变化
-
你能告诉我你是如何尝试的代码吗?可能有一些错误。
-
您可以查看回购代码和历史记录。我确实将子存储转换为可观察对象,但这更像是一个架构决策,而不是一个需要的决策。根本问题是由于 mobx 的自动更新过程,没有什么可以告诉作曲家重新运行。
标签: meteor reactjs reactive-programming observable mobx