Skip to content

Instantly share code, notes, and snippets.

@irrationnelle
Created December 12, 2018 15:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save irrationnelle/faa5bfd2123ee713aafa85a7b2b4b964 to your computer and use it in GitHub Desktop.
Save irrationnelle/faa5bfd2123ee713aafa85a7b2b4b964 to your computer and use it in GitHub Desktop.
import { createSelector } from '@ngrx/store';
export interface State {
evenNums: number[];
oddNums: number[];
}
export const selectSumEvenNums = createSelector(
(state: State) => state.evenNums,
evenNums => evenNums.reduce((prev, curr) => prev + curr)
);
export const selectSumOddNums = createSelector(
(state: State) => state.oddNums,
oddNums => oddNums.reduce((prev, curr) => prev + curr)
);
export const selectTotal = createSelector(
selectSumEvenNums,
selectSumOddNums,
(evenSum, oddSum) => evenSum + oddSum
);
let state = {
evenNums: [2, 4],
oddNums: [1, 3],
};
selectTotal(state); // (2+4)+(1+3)을 연산하여 10을 반환.
selectTotal(state); // 모든 selector의 값이 cache에 저장된 값과 동일하므로 연산 수행을 하지 않음. 10을 반환.
state = { ...state, oddNums: [5, 7] };
// evenNums의 경우 selectSumEvenNums의 cache에 저장된 값과 동일하므로 연산 수행을 하지 않음.
// 따라서 6+(5+7)을 연산하여 18을 반환
selectTotal(state);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment