-
Notifications
You must be signed in to change notification settings - Fork 47.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Do not unmount layout effects if ancestor Offscreen is hidden #25628
Do not unmount layout effects if ancestor Offscreen is hidden #25628
Conversation
7eb639e
to
3acc8db
Compare
Comparing: 1a08f14...876b486 Critical size changesIncludes critical production bundles, as well as any change greater than 2%:
Significant size changesIncludes any change greater than 0.2%: (No significant changes) |
@@ -2869,7 +2869,6 @@ function commitMutationEffectsOnFiber( | |||
|
|||
if (flags & Visibility) { | |||
const offscreenInstance: OffscreenInstance = finishedWork.stateNode; | |||
const offscreenBoundary: Fiber = finishedWork; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This just renames variable. I removed it to align with surrounding code. Everything else uses offscreenBoundary.
const isAncestorOffscreenHidden = offscreenSubtreeIsHidden; | ||
// Only trigger disapper layout effects if: | ||
// - This is an update, not first mount. | ||
// - This Offscreen was hidden before. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean it wasn't hidden before?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, thanks for spotting it.
This makes sense to me! Can't review yet because it's still in draft state |
I published the PR. CI is failing on unrelated error. |
* 'main' of ssh://github.com/GrinZero/react: (163 commits) Do not unmount layout effects if ancestor Offscreen is hidden (facebook#25628) Remove check in renderDidSuspendDelayIfPossible (facebook#25630) [ServerRenderer] Move fizz external runtime implementation to react-dom-bindings (facebook#25617) Unwrap sync resolved thenables without suspending (facebook#25615) refactor isHostResourceType to not receive the context from reconciler and not leak types (facebook#25610) Make host context use null as empty and only error in dev (facebook#25609) [Float] handle resource Resource creation inside svg context (facebook#25599) Allow uncached IO to stablize (facebook#25561) [ServerRenderer] Setup for adding data attributes streaming format (facebook#25567) Do not unmount layout effects on initial Offscreen mount (facebook#25592) Fix type check for null (facebook#25595) Clean up vestige of useOpaqueIdentifier (facebook#25587) Extract logic for detecting bad fallback to helper Split suspended work loop logic into separate functions In work loop, add enum of reasons for suspending Strict Mode: Reuse memoized result from first pass (facebook#25583) Detect and warn if use(promise) is wrapped with try/catch block (facebook#25543) Remove old react-fetch, react-fs and react-pg libraries (facebook#25577) Try assigning fetch to globalThis if global assignment fails (facebook#25571) [Float] handle noscript context for Resources (facebook#25559) ... # Conflicts: # scripts/rollup/build.js
Summary: This sync includes the following changes: - **[4bd245e9e](facebook/react@4bd245e9e )**: Do not unmount layout effects if ancestor Offscreen is hidden ([#25628](facebook/react#25628)) //<Samuel Susla>// - **[df61e708c](facebook/react@df61e708c )**: Remove check in renderDidSuspendDelayIfPossible ([#25630](facebook/react#25630)) //<Andrew Clark>// - **[1a08f1478](facebook/react@1a08f1478 )**: [ServerRenderer] Move fizz external runtime implementation to react-dom-bindings ([#25617](facebook/react#25617)) //<mofeiZ>// - **[1a902623a](facebook/react@1a902623a )**: Unwrap sync resolved thenables without suspending ([#25615](facebook/react#25615)) //<Andrew Clark>// - **[4ea063b56](facebook/react@4ea063b56 )**: refactor isHostResourceType to not receive the context from reconciler and not leak types ([#25610](facebook/react#25610)) //<Josh Story>// - **[8e69bc45a](facebook/react@8e69bc45a )**: Make host context use null as empty and only error in dev ([#25609](facebook/react#25609)) //<Sebastian Markbåge>// - **[5f7ef8c4c](facebook/react@5f7ef8c4c )**: [Float] handle resource Resource creation inside svg context ([#25599](facebook/react#25599)) //<Josh Story>// - **[36426e6cb](facebook/react@36426e6cb )**: Allow uncached IO to stablize ([#25561](facebook/react#25561)) //<Andrew Clark>// - **[6883d7944](facebook/react@6883d7944 )**: [ServerRenderer] Setup for adding data attributes streaming format ([#25567](facebook/react#25567)) //<mofeiZ>// Changelog: [General][Changed] - React Native sync for revisions ab075a2...4bd245e jest_e2e[run_all_tests] Reviewed By: GijsWeterings Differential Revision: D41028209 fbshipit-source-id: a67fdcd441ddd50784f7c1ce402eaecdb5e3126d
…ok#25628) This is a follow up on facebook#25592 There is another condition Offscreen calls `recursivelyTraverseDisappearLayoutEffects` when it shouldn't. Offscreen may be nested. When nested Offscreen is hidden, it should only unmount layout effects if it meets following conditions: 1. This is an update, not first mount. 2. This Offscreen was hidden before. 3. No ancestor Offscreen is hidden. Previously, we were not accounting for the third condition.
This is a follow up on #25592 There is another condition Offscreen calls `recursivelyTraverseDisappearLayoutEffects` when it shouldn't. Offscreen may be nested. When nested Offscreen is hidden, it should only unmount layout effects if it meets following conditions: 1. This is an update, not first mount. 2. This Offscreen was hidden before. 3. No ancestor Offscreen is hidden. Previously, we were not accounting for the third condition.
Summary: This sync includes the following changes: - **[4bd245e9e](facebook/react@4bd245e9e )**: Do not unmount layout effects if ancestor Offscreen is hidden ([facebook#25628](facebook/react#25628)) //<Samuel Susla>// - **[df61e708c](facebook/react@df61e708c )**: Remove check in renderDidSuspendDelayIfPossible ([facebook#25630](facebook/react#25630)) //<Andrew Clark>// - **[1a08f1478](facebook/react@1a08f1478 )**: [ServerRenderer] Move fizz external runtime implementation to react-dom-bindings ([facebook#25617](facebook/react#25617)) //<mofeiZ>// - **[1a902623a](facebook/react@1a902623a )**: Unwrap sync resolved thenables without suspending ([facebook#25615](facebook/react#25615)) //<Andrew Clark>// - **[4ea063b56](facebook/react@4ea063b56 )**: refactor isHostResourceType to not receive the context from reconciler and not leak types ([facebook#25610](facebook/react#25610)) //<Josh Story>// - **[8e69bc45a](facebook/react@8e69bc45a )**: Make host context use null as empty and only error in dev ([facebook#25609](facebook/react#25609)) //<Sebastian Markbåge>// - **[5f7ef8c4c](facebook/react@5f7ef8c4c )**: [Float] handle resource Resource creation inside svg context ([facebook#25599](facebook/react#25599)) //<Josh Story>// - **[36426e6cb](facebook/react@36426e6cb )**: Allow uncached IO to stablize ([facebook#25561](facebook/react#25561)) //<Andrew Clark>// - **[6883d7944](facebook/react@6883d7944 )**: [ServerRenderer] Setup for adding data attributes streaming format ([facebook#25567](facebook/react#25567)) //<mofeiZ>// Changelog: [General][Changed] - React Native sync for revisions ab075a2...4bd245e jest_e2e[run_all_tests] Reviewed By: GijsWeterings Differential Revision: D41028209 fbshipit-source-id: a67fdcd441ddd50784f7c1ce402eaecdb5e3126d
This is a follow up on #25592
There is another condition Offscreen calls
recursivelyTraverseDisappearLayoutEffects
when it shouldn't. Offscreen may be nested. When nested Offscreen is hidden, it should only unmount layout effects if it meets following conditions:Previously, we were not accounting for the third condition.