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 = {}) {
740
740
const selectSelf = ( state : State ) = > state
741
741
742
742
const injectedSelectorCache = new Map <
743
- string ,
743
+ boolean ,
744
744
WeakMap <
745
745
( rootState : any ) => State | undefined ,
746
746
Record < string , ( rootState : any ) => any >
@@ -784,7 +784,7 @@ export function buildCreateSlice({ creators }: BuildCreateSliceConfig = {}) {
784
784
function getSelectors (
785
785
selectState : ( rootState : any ) => State = selectSelf
786
786
) {
787
- const selectorCache = emplace ( injectedSelectorCache , reducerPath , {
787
+ const selectorCache = emplace ( injectedSelectorCache , injected , {
788
788
insert : ( ) => new WeakMap ( ) ,
789
789
} )
790
790
Original file line number Diff line number Diff line change @@ -596,6 +596,36 @@ describe('createSlice', () => {
596
596
( slice . getInitialState ( ) + 1 ) * 2
597
597
)
598
598
} )
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
+ } )
599
629
} )
600
630
describe ( 'reducers definition with asyncThunks' , ( ) => {
601
631
it ( 'is disabled by default' , ( ) => {
You can’t perform that action at this time.
0 commit comments