File tree Expand file tree Collapse file tree 2 files changed +32
-2
lines changed Expand file tree Collapse file tree 2 files changed +32
-2
lines changed Original file line number Diff line number Diff line change @@ -740,7 +740,7 @@ export function buildCreateSlice({ creators }: BuildCreateSliceConfig = {}) {
740740 const selectSelf = ( state : State ) = > state
741741
742742 const injectedSelectorCache = new Map <
743- string ,
743+ boolean ,
744744 WeakMap <
745745 ( rootState : any ) => State | undefined ,
746746 Record < string , ( rootState : any ) => any >
@@ -784,7 +784,7 @@ export function buildCreateSlice({ creators }: BuildCreateSliceConfig = {}) {
784784 function getSelectors (
785785 selectState : ( rootState : any ) => State = selectSelf
786786 ) {
787- const selectorCache = emplace ( injectedSelectorCache , reducerPath , {
787+ const selectorCache = emplace ( injectedSelectorCache , injected , {
788788 insert : ( ) => new WeakMap ( ) ,
789789 } )
790790
Original file line number Diff line number Diff line change @@ -596,6 +596,36 @@ describe('createSlice', () => {
596596 ( slice . getInitialState ( ) + 1 ) * 2
597597 )
598598 } )
599+ it ( 'avoids incorrectly caching selectors' , ( ) => {
600+ const slice = createSlice ( {
601+ name : 'counter' ,
602+ reducerPath : 'injected' ,
603+ initialState : 42 ,
604+ reducers : {
605+ increment : ( state ) => ++ state ,
606+ } ,
607+ selectors : {
608+ selectMultiple : ( state , multiplier : number ) => state * multiplier ,
609+ } ,
610+ } )
611+ expect ( slice . getSelectors ( ) ) . toBe ( slice . getSelectors ( ) )
612+ const combinedReducer = combineSlices ( {
613+ static : slice . reducer ,
614+ } ) . withLazyLoadedSlices < WithSlice < typeof slice > > ( )
615+
616+ const injected = slice . injectInto ( combinedReducer )
617+
618+ expect ( injected . getSelectors ( ) ) . not . toBe ( slice . getSelectors ( ) )
619+
620+ expect ( injected . getSelectors ( ) . selectMultiple ( undefined , 1 ) ) . toBe ( 42 )
621+
622+ expect ( ( ) =>
623+ // @ts -expect-error
624+ slice . getSelectors ( ) . selectMultiple ( undefined , 1 )
625+ ) . toThrowErrorMatchingInlineSnapshot (
626+ `[Error: selectState returned undefined for an uninjected slice reducer]`
627+ )
628+ } )
599629 } )
600630 describe ( 'reducers definition with asyncThunks' , ( ) => {
601631 it ( 'is disabled by default' , ( ) => {
You can’t perform that action at this time.
0 commit comments