参数化 ngrx 选择器的方法之间有什么区别
what's the difference between ways to parameterize ngrx selector
在 ngrx 中,有两种方式(见下面的代码)来参数化一个选择器。
问题:它们有什么区别?
const getUser1 = () =>
createSelector(
getEntities,
(state, props) => state[props.id]
);
const getUser2 = id =>
createSelector(
getEntities,
state => state[id]
);
我认为 memoization 在这两个方面都很好。
下面的文章说....
If the parameter doesn’t change over time we can use a factory function
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)
),在初始化 class 时会评估工厂函数(因此,两个选择器的参数都不会更改)。
在这种情况下我找不到区别....
getUser1
什么时候有用?
在 v6.2 之前无法使用第一个选择器示例,因此将道具传递给选择器的唯一方法是创建工厂函数。
问题中的两个示例完全相同。
不同之处在于 props
会传递给 createSelector
中的 所有 选择器,而工厂函数不会。
在 ngrx 中,有两种方式(见下面的代码)来参数化一个选择器。
问题:它们有什么区别?
const getUser1 = () =>
createSelector(
getEntities,
(state, props) => state[props.id]
);
const getUser2 = id =>
createSelector(
getEntities,
state => state[id]
);
我认为 memoization 在这两个方面都很好。
下面的文章说....
If the parameter doesn’t change over time we can use a factory function 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)
),在初始化 class 时会评估工厂函数(因此,两个选择器的参数都不会更改)。
在这种情况下我找不到区别....
getUser1
什么时候有用?
在 v6.2 之前无法使用第一个选择器示例,因此将道具传递给选择器的唯一方法是创建工厂函数。
问题中的两个示例完全相同。
不同之处在于 props
会传递给 createSelector
中的 所有 选择器,而工厂函数不会。