rematch的状态对象应该挂在页面上而不是APP根组件上

1. 在项目中应该每个页面维持一个store,而不是所有页面的store全都放在APP层,如下:

    <Provider store={store}>
        <App {...this.props} />
    </Provider>

原因:在app中可能会采取模块预加载功能,或者缓存整个模块的历史数据。
    如果单页的数据存放在App层,可能会导致页面数据彼此影响串乱,
    如果没有重置数据,从新进该页面时,可能会残留上次该页面展现时候的数据
    如果是willUnmout的时候重置页面数据,也会有问题。
    如果路由堆栈中存在了相同页面,即当前页面B的上上个页面是B,
    当前页面B返回的时候清除了数据,在回到上上个页面B时,
    页面数据被清除掉了,没有内容展示。因为两个页面共用的是同一份数据。

如果是公共组件,可以把状态对象挂载在App层,但仍旧要注意重置状态,以免影响下次的调用。
建议还是通过useState让函数组件自己维护状态最好,外部父组件或页面可通过传递props来处理数据交互。这样就不用顾及数据重置。

2. 采用了memo包裹的组件,要更改rematch管理的状态数据的时候,要注意深拷贝断开关联,不然组件不会及时更新(参考memo的更新机制)

原文地址:https://www.cnblogs.com/hjj2ldq/p/13025579.html