diff --git a/packages/react-reconciler/src/ReactFiberCommitEffects.js b/packages/react-reconciler/src/ReactFiberCommitEffects.js index cc393b58995d8..f99f65d9f68d7 100644 --- a/packages/react-reconciler/src/ReactFiberCommitEffects.js +++ b/packages/react-reconciler/src/ReactFiberCommitEffects.js @@ -143,7 +143,7 @@ export function commitHookEffectListMount( const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any); const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null; - if (lastEffect !== null) { + if (lastEffect !== null && lastEffect.next !== undefined) { const firstEffect = lastEffect.next; let effect = firstEffect; do { @@ -234,6 +234,11 @@ export function commitHookEffectListMount( } } } + + if (!effect.next) { + break + } + effect = effect.next; } while (effect !== firstEffect); } @@ -251,7 +256,7 @@ export function commitHookEffectListUnmount( const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any); const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null; - if (lastEffect !== null) { + if (lastEffect !== null && lastEffect.next !== undefined) { const firstEffect = lastEffect.next; let effect = firstEffect; do { @@ -290,6 +295,11 @@ export function commitHookEffectListUnmount( } } } + + if (!effect.next) { + break + } + effect = effect.next; } while (effect !== firstEffect); } diff --git a/packages/react-reconciler/src/ReactFiberHooks.js b/packages/react-reconciler/src/ReactFiberHooks.js index 30dc3f91384b7..6435624f977ad 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.js +++ b/packages/react-reconciler/src/ReactFiberHooks.js @@ -226,7 +226,7 @@ export type Effect = { inst: EffectInstance, create: () => (() => void) | void, deps: Array | void | null, - next: Effect, + next?: Effect, }; type StoreInstance = {