【问题标题】:Pause updates from store when leaving page离开页面时暂停商店更新
【发布时间】:2016-12-14 14:25:51
【问题描述】:

我正在使用 ngrx 开发 Ionic2 应用程序。

要从我的商店中选择数据,我使用的是reselect

我有一些页面使用相同的数据(来自同一个减速器),但结合其他减速器数据,取决于当前页面(这意味着每个页面都有自己的重新选择器,但是每个选择器都有至少有一个参数与其他重新选择器相同。因此,每当这些参数之一发生更改时,这些页面的所有重新选择器都需要重新计算。

看起来像这样:

page1 = createSelector(fromState1.getData, fromCommonState.getData,(data, commonData) => {...});
page2 = createSelector(fromState2.getData, fromCommonState.getData,(data, commonData) => {...});
page3 = createSelector(fromState3.getData, fromCommonState.getData,(data, commonData) => {...});

我担心的是,如果在公共状态更改时有很多页面,所有选择器都会重新计算,即使我只需要重新计算当前页面使用的选择器。如果选择器需要做复杂的事情,我认为这可能会成为一个很大的性能问题。

有没有办法“暂停”从商店获取更新,直到我返回该页面?这样只会重新计算当前页面的选择器。

或者有没有其他方法可以避免不必要的计算?

【问题讨论】:

    标签: angular redux ionic2 ngrx reselect


    【解决方案1】:

    当在整个应用程序(或多个智能组件)中使用选择器时,我会在一个通用文件 (selectors.ts) 中创建选择器。对于您的情况,为什么不保持简单并将选择器放在智能组件(页面)中?这样它只在需要时计算和订阅。

    reselect 大量用于不使用 Observables 的库,并且数据实际上会在每次状态更改时推送。使用像 ngrx 这样的库,这个增益可以忽略不计,除非您处理大量数据。对我来说,这是一个过早的优化。

    要暂停状态,您可以在商店的某处保持当前页面状态,然后使用过滤器仅在该状态下的页面匹配时执行繁重的操作。

    let page3 = createSelector(
    fromState3.getData, fromCommonState.getData,
    (data, commonData) => {
        if(fromState3.selected) { 
          // Large computation
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多