Created
December 12, 2018 15:27
-
-
Save irrationnelle/faa5bfd2123ee713aafa85a7b2b4b964 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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