Javascript 角度ngrx示例理解重选
我看了一遍回购协议,不明白“重新选择”的用法 据我所知,Javascript 角度ngrx示例理解重选,javascript,angular,ngrx,Javascript,Angular,Ngrx,我看了一遍回购协议,不明白“重新选择”的用法 据我所知,createSelector函数接受两个接受相同参数的函数 例如: const shopItemsSelector = state => state.shop.items const taxPercentSelector = state => state.shop.taxPercent const taxSelector = createSelector( subtotalSelector, taxPercentSel
createSelector
函数接受两个接受相同参数的函数
例如:
const shopItemsSelector = state => state.shop.items
const taxPercentSelector = state => state.shop.taxPercent
const taxSelector = createSelector(
subtotalSelector,
taxPercentSelector,
(subtotal, taxPercent) => subtotal * (taxPercent / 100)
)
这两个函数都将整个状态作为参数
但在ngrx示例中-
export const getLayoutState = (state: State) => state.layout;
export const getShowSidenav = (state: State) => state.showSidenav;
export const getShowSidenav = createSelector(getLayoutState, fromLayout.getShowSidenav);
store.select(fromRoot.getShowSidenav)
在上面的示例中,它们似乎采用了不同的参数,第一个参数采用整个状态,第二个参数采用布局状态
工作情况如何 这很混乱,因为它分布在多个文件中 在layout.ts的内部,我们有:
export const getShowSidenav = (state: State) => state.showSidenav;
export const getLayoutState = (state: State) => state.layout;
export const getShowSidenav = createSelector(getLayoutState,
fromLayout.getShowSidenav);
在index.ts中,我们有:
export const getShowSidenav = (state: State) => state.showSidenav;
export const getLayoutState = (state: State) => state.layout;
export const getShowSidenav = createSelector(getLayoutState,
fromLayout.getShowSidenav);
因此,如果我们在一个文件中完成所有操作,它将如下所示:
// getLayoutState works at the AppState level
export const getLayoutState = (state: State) => state.layout;
export const getShowSidenav = createSelector(getLayoutState,
// This fat arrow function operates only on what getLayoutState gives us
(layoutState: LayoutState) => layoutState.showSidenav);
在本例中,当您使用createSelector时,第一个参数采用getLayoutState,它从整个AppState返回布局切片。然后将该值发送到createSelector的最终参数
下面是我所说的最终参数的进一步细分:
// getA values are passed to the final function as a
export const getSomething = createSelector(getA,
(a) => a);
// getA, getB values are passed to the final function as a, b
export const getSomething = createSelector(getA, getB,
(a, b) => a + b);
// getA, getB, getC values are passed to the final function as a, b, c
export const getSomething = createSelector(getA, getB, getC
(a, b, c) => a + b + c);
在所有这些情况下,最后一个参数始终是一个函数,它将以前的所有选择器都作为参数。但重新选择的示例并非如此。在本例中,第二个参数没有得到第一个参数的结果。从它们的文档()中,它表示:createSelector(…inputSelectors |[inputSelectors],resultFunc)接受一个或多个选择器或一组选择器,计算它们的值并将它们作为参数传递给resultFunc。换句话说,第一组选择器将其值传递给最后一个参数resultFunc。在本例中,getLayoutState是一个inputSelector,最后一个fat arrow函数是resultFunc