参数化ngrx选择器的方式之间有什么区别

时间:2019-03-16 04:35:36

标签: angular ngrx ngrx-store

在ngrx中,有两种方法(请参阅以下代码)来对选择器进行参数化。

问题:它们之间有什么区别?

const getUser1 = () =>
  createSelector(
    getEntities,
    (state, props) => state[props.id]
  );

const getUser2 = id =>
  createSelector(
    getEntities,
    state => state[id]
  );

我认为回忆在两种情况下都很好。

下面的文章说...。

  

如果参数不会随着时间变化,我们可以使用工厂功能   https://blog.angularindepth.com/ngrx-parameterized-selector-e3f610529f8

好。这些选择器的用法如下。

@Component({
  selector: 'app-user-container',
  template: ``
})
export class UserContainerComponent {
  user1$ = this.store.pipe(select(getUser1(), { id: 1 }))
  user2$ = this.store.pipe(select(getUser2(2)))

  constructor(private store: Store<AppState>) {}
}

在两种情况下(getUser1()getUser2(2)),初始化类时都会评估工厂函数(因此,两个选择器都不会更改参数)。 在这种情况下我找不到区别。...

getUser1何时有用?

1 个答案:

答案 0 :(得分:0)

在v6.2之前的版本中,无法使用第一个选择器示例,因此将prop传递给选择器的唯一方法是创建工厂函数。

问题中的两个例子都完全一样。

区别在于props将被传递给createSelector中的所有选择器,而工厂功能则不会。