【问题标题】:Dynamically imported module in react won't react to Mobx observablereact中动态导入的模块不会对Mobx observable做出反应
【发布时间】:2017-09-15 06:57:19
【问题描述】:

我将一个 react 组件动态加载(通过 webpack 的 import('module').then)到我的包中。问题是该组件不会对 Mobx observable 的更改做出反应。如果我以正常方式导入模块,一切正常。

查看 Mobx 开发工具,我可以看到当组件被静态导入时,当我看到 observable 发生变化时:

更新了“ReviewsStore@6.profile”:(ReviewsStore@6.profile)(原为(ReviewsStore@6.profile)) 预定的异步反应‘Reviews#0.render()’ 反应‘$Reviews#0.render()’

相反,当我使用代码拆分时,我看不到任何渲染调用:

更新了“ReviewsStore@6.profile”:(ReviewsStore@6.profile)(原为 (ReviewsStore@6.profile))

下面是我的测试数据代码

class ReviewsStore { // My store
@observable profile = {};

@action
getProfile() {
    $.ajax({ url })
        .then(action((data) => {
            this.profile = {
                user: 'John Doe',
                userid: 123,
                followers: 25,
                reviewsCount: 22,
                reviews: [
                    {
                        body: 'Lorem ipsum ',
                        date: '20/12/2016',
                        rating: 4.5,
                    },
                    {
                        body: 'Lorem ipsum dolor sit',
                        date: '23/12/2016',
                        rating: 4.2,
                    },
                ],
            };

        }));
}

}

@observer class Reviews extends Component { // My View
constructor() {
    super();
    this.getProfile = this.getProfile.bind(this);
    this.state = {
        asyncModule: null,
    };
}

getProfile(id) {
    this.props.store.getProfile(id)
    import('../components/reviews/user-profile')
                .then(({ default: Profile }) => {
                    this.setState({
                        asyncModule: <Profile user={this.props.store.profile} />,
                    });
                });
}

render() {
    return (
        <div>
        {this.state.asyncModule}
        </div>
    );
}

}

【问题讨论】:

    标签: reactjs mobx mobx-react


    【解决方案1】:

    你能确认 mobx 包只包含一次吗?仅在您的基本捆绑包中,而不是在您拆分的捆绑包中?

    【讨论】:

    • 我的拆分组件只有 4kb,我没有在该文件的任何地方导入 mobx,顺便说一句,我的组件是无状态组件,我不知道这是否重要我只是想给你有帮助的线索。 (我试过把它变成一个类组件并添加观察者装饰器,但我没有看到任何变化)。
    • 更新:我做了一个最基本的应用程序只是为了检查问题是否仍然存在。如果您有时间可以看一下,我将不胜感激!你可以找到它here(顺便说一句,react Amsterdam 的演讲很棒!)
    • 你能在 mobx 存储库中提出问题吗?那里可能有真正有代码拆分经验的人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2020-09-15
    • 2020-07-18
    • 2018-07-28
    • 1970-01-01
    • 2016-10-02
    • 2020-06-26
    相关资源
    最近更新 更多