File tree Expand file tree Collapse file tree 1 file changed +15
-1
lines changed
Expand file tree Collapse file tree 1 file changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -155,12 +155,26 @@ export default function useNotification(
155155 }
156156 } ) ;
157157
158+ // https://github.com/ant-design/ant-design/issues/52590
159+ // React `startTransition` will run once `useEffect` but many times `setState`,
160+ // So `setTaskQueue` with filtered array will cause infinite loop.
161+ // We cache the first match queue instead.
162+ let oriTaskQueue : Task [ ] ;
163+ let tgtTaskQueue : Task [ ] ;
164+
158165 // React 17 will mix order of effect & setState in async
159166 // - open: setState[0]
160167 // - effect[0]
161168 // - open: setState[1]
162169 // - effect setState([]) * here will clean up [0, 1] in React 17
163- setTaskQueue ( ( oriQueue ) => oriQueue . filter ( ( task ) => ! taskQueue . includes ( task ) ) ) ;
170+ setTaskQueue ( ( oriQueue ) => {
171+ if ( oriTaskQueue !== oriQueue || ! tgtTaskQueue ) {
172+ oriTaskQueue = oriQueue ;
173+ tgtTaskQueue = oriQueue . filter ( ( task ) => ! taskQueue . includes ( task ) ) ;
174+ }
175+
176+ return tgtTaskQueue ;
177+ } ) ;
164178 }
165179 } , [ taskQueue ] ) ;
166180
You can’t perform that action at this time.
0 commit comments