File tree 1 file changed +7
-4
lines changed
site/src/components/Spinner
1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -146,16 +146,19 @@ function useShowSpinner(loading: boolean, spinnerDelayMs: number): boolean {
146
146
// render. Inside a render, if you keep calling a state dispatch, you will
147
147
// get an infinite render loop, no matter what the state value is. There
148
148
// must be a "base case" that causes re-renders to stabilize/stop
149
- const [ cachedDelay , setCachedDelay ] = useState ( safeDelay ) ;
150
149
const [ delayLapsed , setDelayLapsed ] = useState ( safeDelay === 0 ) ;
151
- if ( delayLapsed && ! loading ) {
150
+ const [ renderCache , setRenderCache ] = useState ( { loading, safeDelay } ) ;
151
+ const resetOnRerender =
152
+ delayLapsed && ! loading && loading !== renderCache . loading ;
153
+ if ( resetOnRerender ) {
152
154
setDelayLapsed ( false ) ;
155
+ setRenderCache ( ( current ) => ( { ...current , loading } ) ) ;
153
156
}
154
157
const delayWasRemovedOnRerender =
155
- ! delayLapsed && safeDelay === 0 && cachedDelay !== safeDelay ;
158
+ ! delayLapsed && safeDelay === 0 && renderCache . safeDelay !== safeDelay ;
156
159
if ( delayWasRemovedOnRerender ) {
157
160
setDelayLapsed ( true ) ;
158
- setCachedDelay ( safeDelay ) ;
161
+ setRenderCache ( ( current ) => ( { ... current , safeDelay } ) ) ;
159
162
}
160
163
useEffect ( ( ) => {
161
164
if ( safeDelay === 0 ) {
You can’t perform that action at this time.
0 commit comments