@ngrx/store createSelector() 真的有必要吗?

Dol*_*lan 1 ngrx ngrx-effects angular ngrx-store ngrx-store-4.0

我真的很喜欢干净的 API this.store.select('media', 'games');

我不需要用 来创建任何选择器createSelector(),也不需要导入任何东西。我觉得当项目变大时,选择器成为了这个伟大的中间层。media.selectors.ts成为一个整体文件。

我最终让很多选择器做简单的事情,而不是:

this.store.select('media', 'games');
Run Code Online (Sandbox Code Playgroud)

我愿意:

import * as fromMedia '../media'

this.store.select(fromMedia.getAllGamesSelector());
Run Code Online (Sandbox Code Playgroud)

和同上,用于movies例如:

import * as fromMedia '../media'

this.store.select(fromMedia.getAllMoviesSelector());
Run Code Online (Sandbox Code Playgroud)

我知道createSelector()记忆化有好处,但我非常怀疑使用简单的选择strings会慢得多......

我读过的每个指南都要求您必须使用 createSelector()

所以我的问题是,什么时候使用合适createSelector()?可以使用字符串选择器,还是不赞成并且是不好的做法?

Hit*_*nds 5

的概念selector不仅对于记忆目的非常有用,而且虽然它似乎添加了不必要的脚手架,但它对于大型项目变得非常重要:

  1. 让重构变得非常简单:想象一下,你需要改变你的状态结构,而你没有选择器,那么你可能最终会重构你的所有项目,包括视图组件。
  2. 允许derived data提取,你可以保持你的商店干净整洁,只保存重要的数据,把推导留给选择器(假设你想显示购物车的总量,所以你可以创建一个选择器来收集购物车中的所有产品和总和他们的价格)。