Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度ngrx示例理解重选_Javascript_Angular_Ngrx - Fatal编程技术网

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