1

我正在使用 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) => {...});

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

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

还是有另一种方法可以避免不必要的计算?

4

1 回答 1

0

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

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

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

let page3 = createSelector(
fromState3.getData, fromCommonState.getData,
(data, commonData) => {
    if(fromState3.selected) { 
      // Large computation
    }
});
于 2016-12-20T01:40:43.620 回答