(finishedWork: Fiber)
| 2906 | } |
| 2907 | |
| 2908 | export function disappearLayoutEffects(finishedWork: Fiber) { |
| 2909 | const prevEffectStart = pushComponentEffectStart(); |
| 2910 | const prevEffectDuration = pushComponentEffectDuration(); |
| 2911 | const prevEffectErrors = pushComponentEffectErrors(); |
| 2912 | const prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); |
| 2913 | switch (finishedWork.tag) { |
| 2914 | case FunctionComponent: |
| 2915 | case ForwardRef: |
| 2916 | case MemoComponent: |
| 2917 | case SimpleMemoComponent: { |
| 2918 | // TODO (Offscreen) Check: flags & LayoutStatic |
| 2919 | commitHookLayoutUnmountEffects( |
| 2920 | finishedWork, |
| 2921 | finishedWork.return, |
| 2922 | HookLayout, |
| 2923 | ); |
| 2924 | recursivelyTraverseDisappearLayoutEffects(finishedWork); |
| 2925 | break; |
| 2926 | } |
| 2927 | case ClassComponent: { |
| 2928 | // TODO (Offscreen) Check: flags & RefStatic |
| 2929 | safelyDetachRef(finishedWork, finishedWork.return); |
| 2930 | |
| 2931 | const instance = finishedWork.stateNode; |
| 2932 | if (typeof instance.componentWillUnmount === 'function') { |
| 2933 | safelyCallComponentWillUnmount( |
| 2934 | finishedWork, |
| 2935 | finishedWork.return, |
| 2936 | instance, |
| 2937 | ); |
| 2938 | } |
| 2939 | |
| 2940 | recursivelyTraverseDisappearLayoutEffects(finishedWork); |
| 2941 | break; |
| 2942 | } |
| 2943 | case HostSingleton: { |
| 2944 | if (supportsSingletons) { |
| 2945 | // TODO (Offscreen) Check: flags & RefStatic |
| 2946 | commitHostSingletonRelease(finishedWork); |
| 2947 | } |
| 2948 | // Expected fallthrough to HostComponent |
| 2949 | } |
| 2950 | case HostHoistable: |
| 2951 | case HostComponent: { |
| 2952 | // TODO (Offscreen) Check: flags & RefStatic |
| 2953 | safelyDetachRef(finishedWork, finishedWork.return); |
| 2954 | |
| 2955 | if (enableFragmentRefs && finishedWork.tag === HostComponent) { |
| 2956 | commitFragmentInstanceDeletionEffects(finishedWork); |
| 2957 | } |
| 2958 | |
| 2959 | recursivelyTraverseDisappearLayoutEffects(finishedWork); |
| 2960 | break; |
| 2961 | } |
| 2962 | case OffscreenComponent: { |
| 2963 | const isHidden = finishedWork.memoizedState !== null; |
| 2964 | if (isHidden) { |
| 2965 | // Nested Offscreen tree is already hidden. Don't disappear |
no test coverage detected