@@ -6,7 +6,7 @@ import React, {
66  useLayoutEffect , 
77  useMemo , 
88  useReducer , 
9-   useRef , 
9+   useRef ,   useState , 
1010}  from  'react' ; 
1111import  { 
1212  create , 
@@ -15,7 +15,6 @@ import {
1515  LifecycleMiddleWare , 
1616  Action , 
1717  AgentReducer , 
18-   DefaultActionType , 
1918  Model , 
2019  weakSharing , 
2120  Factory , 
@@ -32,12 +31,19 @@ export function useAgentReducer<T extends Model<S>, S>(
3231  entry : T  |  {  new ( ) : T  } , 
3332  ...mdws : MiddleWare [ ] 
3433) : T  { 
34+   const  [ version ,  setVersion ]  =  useState ( 0 ) ; 
3535  const  reducerRef  =  useRef < null  |  AgentReducer < S ,  T > > ( null ) ; 
3636
3737  const  initialed  =  reducerRef . current  !==  null ; 
3838
3939  if  ( ! initialed )  { 
40-     reducerRef . current  =  create ( entry ,  ...mdws ) ; 
40+     const  reducerFn  =  create < S ,  T > ( entry ,  ...mdws ) ; 
41+     reducerRef . current  =  reducerFn ; 
42+     reducerFn . recreate ( ( )  =>  { 
43+       reducerFn . disconnect ( ) ; 
44+       reducerRef . current  =  null ; 
45+       setVersion ( ( v )  =>  v  +  1 ) ; 
46+     } ) ; 
4147  } 
4248
4349  const  reducer  =  reducerRef . current  as  Reducer < S ,  Action > & ReducerPadding < S ,  T > ; 
@@ -61,7 +67,7 @@ export function useAgentReducer<T extends Model<S>, S>(
6167        red . disconnect ( ) ; 
6268      } ; 
6369    } , 
64-     [ ] , 
70+     [ version ] , 
6571  ) ; 
6672
6773  return  reducer . agent ; 
@@ -80,12 +86,20 @@ export function useAgentSelector<T extends Model<S>, S, R>(
8086  mapStateCallback : ( state : T [ 'state' ] )  =>  R , 
8187  equalityFn ?: ( prev : R ,  current : R )  =>  boolean , 
8288) : R  { 
89+   const  [ version ,  setVersion ]  =  useState ( 0 ) ; 
90+ 
8391  const  reducerRef  =  useRef < null  |  AgentReducer < S ,  T > > ( null ) ; 
8492
8593  const  initialed  =  reducerRef . current  !==  null ; 
8694
8795  if  ( ! initialed )  { 
88-     reducerRef . current  =  create ( entry ) ; 
96+     const  reducerFn  =  create < S ,  T > ( entry ) ; 
97+     reducerRef . current  =  reducerFn ; 
98+     reducerFn . recreate ( ( )  =>  { 
99+       reducerFn . disconnect ( ) ; 
100+       reducerRef . current  =  null ; 
101+       setVersion ( ( v )  =>  v  +  1 ) ; 
102+     } ) ; 
89103  } 
90104
91105  const  reducer  =  reducerRef . current  as  Reducer < S ,  Action > & ReducerPadding < S ,  T > ; 
@@ -124,7 +138,7 @@ export function useAgentSelector<T extends Model<S>, S, R>(
124138        red . disconnect ( ) ; 
125139      } ; 
126140    } , 
127-     [ ] , 
141+     [ version ] , 
128142  ) ; 
129143
130144  return  current ; 
@@ -134,12 +148,20 @@ export function useAgentMethods<T extends Model<S>, S>(
134148  entry : T , 
135149  ...middleWares : MiddleWare [ ] 
136150) : Omit < T ,  'state' >  { 
151+   const  [ version ,  setVersion ]  =  useState ( 0 ) ; 
152+ 
137153  const  reducerRef  =  useRef < null  |  AgentReducer < S ,  T > > ( null ) ; 
138154
139155  const  initialed  =  reducerRef . current  !==  null ; 
140156
141157  if  ( ! initialed )  { 
142-     reducerRef . current  =  create ( entry ,  ...middleWares ) ; 
158+     const  reducerFn  =  create < S ,  T > ( entry ,  ...middleWares ) ; 
159+     reducerRef . current  =  reducerFn ; 
160+     reducerFn . recreate ( ( )  =>  { 
161+       reducerFn . disconnect ( ) ; 
162+       reducerRef . current  =  null ; 
163+       setVersion ( ( v )  =>  v  +  1 ) ; 
164+     } ) ; 
143165  } 
144166
145167  const  reducer  =  reducerRef . current  as  Reducer < S ,  Action > & ReducerPadding < S ,  T > ; 
@@ -157,7 +179,7 @@ export function useAgentMethods<T extends Model<S>, S>(
157179        red . disconnect ( ) ; 
158180      } ; 
159181    } , 
160-     [ ] , 
182+     [ version ] , 
161183  ) ; 
162184
163185  return  reducer . agent ; 
0 commit comments