2016-07-02 195 views
1

我已经设置了一个新的样本/样板项目,用于使用Meteor和React & MobX(使用Mantra架构)进行测试。该项目是在https://github.com/markoshust/mantra-matui-mobxReact + 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旧状态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

+0

我似乎已经解决了这一问题,使用自定义withMobx作曲家,它做的唯一的事情就是等待下一个滴答呈现组件。任何想法为什么这个修复它? Mobx应该是同步的。 https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/libs/with_mobx.js#L5 –

+0

我认为'State.header'是可观察的,但不是'State .header.title'。 –

+0

试过这个,没有改变 –

回答

1

我需要为MobX创建一个自定义作曲家。我添加了一个监听autorun来重新编写组件。

https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/libs/with_mobx.js

import { compose } from 'mantra-core'; 
import { autorun } from 'mobx'; 

export default function composeWithMobx(fn, L, E, options) { 
    const onPropsChange = (props, onData) => { 
    const reactiveFn =() => fn(props, onData); 

    autorun(reactiveFn); 

    return reactiveFn(); 
    }; 

    return compose(onPropsChange, L, E, options); 
} 
+0

嗨马克,我刚到NL。我看到原始链接中的一些链接被破坏。如果您可以提供原始提交的链接,我很乐意看看原始解决方案以调查为什么它没有按预期工作 – mweststrate

+0

Hi @mweststrate,谢谢,更新链接!自我发布以来改变了一些事情。现在一切正常,但只有使用composeWithRedux作曲家(其中包括autorun()调用)。我应该不需要自动运行这个工作? –

+0

我认为没有自动运行应该没问题。请注意,返回的垃圾处理器应该在组件处置时最好调用。 – mweststrate

相关问题