首页 > 解决方案 > 参数化ngrx选择器的方法有什么区别

问题描述

在 ngrx 中,有 2 种方法(参见下面的代码)来参数化选择器。

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

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有用?

标签: angularngrxngrx-store

解决方案


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

问题中的两个示例完全相同。

不同之处在于 props它将传递给 中的所有选择器createSelector,而工厂函数则不会。


推荐阅读