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(
155
155
}
156
156
} ) ;
157
157
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
+
158
165
// React 17 will mix order of effect & setState in async
159
166
// - open: setState[0]
160
167
// - effect[0]
161
168
// - open: setState[1]
162
169
// - 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
+ } ) ;
164
178
}
165
179
} , [ taskQueue ] ) ;
166
180
You can’t perform that action at this time.
0 commit comments