Skip to content
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

Allow uncached IO to stablize #25561

Merged
merged 1 commit into from
Nov 1, 2022

Conversation

acdlite
Copy link
Collaborator

@acdlite acdlite commented Oct 25, 2022

Initial draft. I need to test this more.

If a promise is passed to use, but the I/O isn't cached, we should still be able to unwrap it.

This already worked in Server Components, and during SSR.

For Fiber (in the browser), before this fix the state would get lost between attempts unless the promise resolved immediately in a microtask, which requires IO to be cached. This was due to an implementation quirk of Fiber where the state is reset as soon as the stack unwinds. The workaround is to suspend the entire Fiber work loop until the promise resolves.

The Server Components and SSR runtimes don't require a workaround: they can maintain multiple parallel child tasks and reuse the state indefinitely across attempts. That's ideally how Fiber should work, too, but it will require larger refactor.

The downside of our approach in Fiber is that it won't "warm up" the siblings while you're suspended, but to avoid waterfalls you're supposed to hoist data fetches higher in the tree regardless. But we have other ideas for how we can add this back in the future. (Though again, this doesn't affect Server Components, which already have the ideal behavior.)

@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Oct 25, 2022
@sizebot
Copy link

sizebot commented Oct 25, 2022

Comparing: 6883d79...401230e

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.min.js +0.27% 153.14 kB 153.56 kB +0.13% 48.80 kB 48.87 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.27% 155.06 kB 155.48 kB +0.11% 49.41 kB 49.46 kB
facebook-www/ReactDOM-prod.classic.js +0.31% 528.79 kB 530.42 kB +0.15% 94.47 kB 94.61 kB
facebook-www/ReactDOM-prod.modern.js +0.32% 514.04 kB 515.68 kB +0.17% 92.31 kB 92.46 kB
facebook-www/ReactDOMForked-prod.classic.js +0.31% 528.79 kB 530.42 kB +0.15% 94.47 kB 94.62 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-prod.js +0.57% 286.38 kB 288.02 kB +0.22% 51.00 kB 51.12 kB
react-native/implementations/ReactFabric-prod.js +0.55% 313.61 kB 315.34 kB +0.21% 55.94 kB 56.06 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-profiling.js +0.54% 302.00 kB 303.64 kB +0.18% 53.37 kB 53.47 kB
react-native/implementations/ReactNativeRenderer-prod.js +0.54% 319.64 kB 321.37 kB +0.18% 56.89 kB 56.99 kB
react-native/implementations/ReactFabric-prod.fb.js +0.53% 324.36 kB 326.09 kB +0.19% 58.03 kB 58.14 kB
react-native/implementations/ReactNativeRenderer-prod.fb.js +0.53% 330.38 kB 332.11 kB +0.15% 58.99 kB 59.08 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.development.js +0.52% 739.28 kB 743.09 kB +0.54% 159.85 kB 160.72 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.development.js +0.52% 739.30 kB 743.11 kB +0.54% 159.88 kB 160.75 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.development.js +0.52% 739.40 kB 743.22 kB +0.54% 159.91 kB 160.78 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.development.js +0.51% 774.49 kB 778.46 kB +0.52% 161.58 kB 162.42 kB
oss-stable/react-test-renderer/umd/react-test-renderer.development.js +0.51% 774.51 kB 778.48 kB +0.52% 161.61 kB 162.45 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.development.js +0.51% 774.62 kB 778.58 kB +0.52% 161.65 kB 162.48 kB
facebook-www/ReactART-prod.modern.js +0.51% 321.90 kB 323.53 kB +0.21% 55.11 kB 55.23 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-dev.js +0.50% 753.60 kB 757.40 kB +0.55% 161.48 kB 162.37 kB
oss-stable-semver/react-art/cjs/react-art.development.js +0.50% 759.85 kB 763.66 kB +0.53% 163.95 kB 164.82 kB
oss-stable/react-art/cjs/react-art.development.js +0.50% 759.87 kB 763.69 kB +0.53% 163.97 kB 164.84 kB
react-native/implementations/ReactFabric-profiling.js +0.50% 332.92 kB 334.58 kB +0.23% 59.10 kB 59.23 kB
oss-experimental/react-art/cjs/react-art.development.js +0.50% 767.67 kB 771.49 kB +0.52% 165.40 kB 166.26 kB
facebook-www/ReactTestRenderer-dev.modern.js +0.49% 769.99 kB 773.80 kB +0.54% 164.73 kB 165.62 kB
facebook-www/ReactTestRenderer-dev.classic.js +0.49% 769.99 kB 773.80 kB +0.54% 164.73 kB 165.62 kB
facebook-www/ReactART-prod.classic.js +0.49% 332.69 kB 334.33 kB +0.21% 56.90 kB 57.02 kB
react-native/implementations/ReactNativeRenderer-profiling.js +0.49% 339.03 kB 340.68 kB +0.21% 60.06 kB 60.18 kB
react-native/implementations/ReactFabric-profiling.fb.js +0.47% 351.28 kB 352.92 kB +0.14% 62.19 kB 62.28 kB
react-native/implementations/ReactNativeRenderer-profiling.fb.js +0.46% 357.37 kB 359.01 kB +0.14% 63.16 kB 63.25 kB
oss-stable-semver/react-art/umd/react-art.development.js +0.46% 866.82 kB 870.78 kB +0.46% 182.15 kB 182.99 kB
oss-stable/react-art/umd/react-art.development.js +0.46% 866.84 kB 870.81 kB +0.46% 182.17 kB 183.01 kB
react-native/implementations/ReactFabric-dev.js +0.46% 832.20 kB 836.00 kB +0.48% 180.52 kB 181.39 kB
oss-stable-semver/react-art/cjs/react-art.production.min.js +0.46% 91.37 kB 91.78 kB +0.21% 28.22 kB 28.28 kB
oss-stable/react-art/cjs/react-art.production.min.js +0.46% 91.39 kB 91.81 kB +0.21% 28.22 kB 28.28 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.development.js +0.45% 839.38 kB 843.19 kB +0.45% 178.25 kB 179.06 kB
oss-stable/react-reconciler/cjs/react-reconciler.development.js +0.45% 839.41 kB 843.22 kB +0.45% 178.27 kB 179.08 kB
oss-experimental/react-art/umd/react-art.development.js +0.45% 875.09 kB 879.05 kB +0.45% 183.59 kB 184.42 kB
react-native/implementations/ReactNativeRenderer-dev.js +0.45% 841.74 kB 845.54 kB +0.47% 182.97 kB 183.83 kB
oss-experimental/react-art/cjs/react-art.production.min.js +0.45% 92.81 kB 93.23 kB +0.29% 28.62 kB 28.70 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.45% 847.21 kB 851.02 kB +0.45% 179.69 kB 180.49 kB
facebook-www/ReactART-dev.modern.js +0.44% 860.80 kB 864.61 kB +0.46% 181.67 kB 182.50 kB
facebook-www/ReactART-dev.classic.js +0.44% 871.11 kB 874.92 kB +0.45% 183.74 kB 184.57 kB
react-native/implementations/ReactFabric-dev.fb.js +0.44% 868.93 kB 872.73 kB +0.45% 187.65 kB 188.50 kB
react-native/implementations/ReactNativeRenderer-dev.fb.js +0.43% 878.46 kB 882.26 kB +0.44% 190.08 kB 190.92 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.production.min.js +0.42% 99.33 kB 99.75 kB +0.18% 30.66 kB 30.71 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.production.min.js +0.42% 99.36 kB 99.78 kB +0.18% 30.66 kB 30.71 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.production.min.js +0.42% 99.42 kB 99.84 kB +0.17% 30.69 kB 30.74 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.production.min.js +0.42% 99.57 kB 99.99 kB +0.33% 31.00 kB 31.10 kB
oss-stable/react-test-renderer/umd/react-test-renderer.production.min.js +0.42% 99.60 kB 100.01 kB +0.31% 31.00 kB 31.10 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.production.min.js +0.42% 99.66 kB 100.07 kB +0.29% 31.04 kB 31.13 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.production.min.js +0.40% 105.14 kB 105.56 kB +0.21% 32.15 kB 32.22 kB
oss-stable/react-reconciler/cjs/react-reconciler.production.min.js +0.40% 105.16 kB 105.58 kB +0.21% 32.17 kB 32.24 kB
oss-experimental/react-reconciler/cjs/react-reconciler.production.min.js +0.39% 106.58 kB 107.00 kB +0.22% 32.57 kB 32.64 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.profiling.min.js +0.37% 114.00 kB 114.41 kB +0.15% 34.32 kB 34.37 kB
oss-stable/react-reconciler/cjs/react-reconciler.profiling.min.js +0.37% 114.02 kB 114.44 kB +0.15% 34.34 kB 34.39 kB
oss-experimental/react-reconciler/cjs/react-reconciler.profiling.min.js +0.36% 115.44 kB 115.85 kB +0.16% 34.74 kB 34.80 kB
facebook-www/ReactDOMTesting-prod.modern.js +0.35% 476.36 kB 478.04 kB +0.09% 88.24 kB 88.32 kB
facebook-www/ReactDOMTesting-prod.classic.js +0.34% 492.20 kB 493.88 kB +0.08% 90.54 kB 90.61 kB
oss-stable-semver/react-art/umd/react-art.production.min.js +0.33% 127.20 kB 127.62 kB +0.24% 39.38 kB 39.48 kB
oss-stable/react-art/umd/react-art.production.min.js +0.33% 127.22 kB 127.65 kB +0.24% 39.38 kB 39.48 kB
oss-experimental/react-art/umd/react-art.production.min.js +0.33% 128.63 kB 129.05 kB +0.18% 39.90 kB 39.97 kB
oss-stable-semver/react-dom/cjs/react-dom.development.js +0.32% 1,184.98 kB 1,188.80 kB +0.31% 262.61 kB 263.43 kB
oss-stable/react-dom/cjs/react-dom.development.js +0.32% 1,185.01 kB 1,188.82 kB +0.31% 262.64 kB 263.45 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.development.js +0.32% 1,187.96 kB 1,191.77 kB +0.30% 263.13 kB 263.92 kB
facebook-www/ReactDOMTesting-dev.modern.js +0.32% 1,188.49 kB 1,192.30 kB +0.32% 262.85 kB 263.68 kB
oss-experimental/react-dom/cjs/react-dom.development.js +0.32% 1,195.06 kB 1,198.87 kB +0.32% 264.60 kB 265.44 kB
oss-stable-semver/react-dom/umd/react-dom.development.js +0.32% 1,242.74 kB 1,246.70 kB +0.31% 265.41 kB 266.23 kB
oss-stable/react-dom/umd/react-dom.development.js +0.32% 1,242.76 kB 1,246.72 kB +0.31% 265.43 kB 266.25 kB
facebook-www/ReactDOM-prod.modern.js +0.32% 514.04 kB 515.68 kB +0.17% 92.31 kB 92.46 kB
facebook-www/ReactDOMForked-prod.modern.js +0.32% 514.04 kB 515.68 kB +0.17% 92.31 kB 92.46 kB
oss-experimental/react-dom/umd/react-dom.development.js +0.32% 1,253.36 kB 1,257.33 kB +0.31% 267.38 kB 268.20 kB
facebook-www/ReactDOMTesting-dev.classic.js +0.31% 1,218.37 kB 1,222.18 kB +0.31% 268.68 kB 269.51 kB
facebook-www/ReactDOM-prod.classic.js +0.31% 528.79 kB 530.42 kB +0.15% 94.47 kB 94.61 kB
facebook-www/ReactDOMForked-prod.classic.js +0.31% 528.79 kB 530.42 kB +0.15% 94.47 kB 94.62 kB
facebook-www/ReactDOM-profiling.modern.js +0.30% 544.07 kB 545.68 kB +0.06% 96.86 kB 96.92 kB
facebook-www/ReactDOMForked-profiling.modern.js +0.30% 544.07 kB 545.68 kB +0.06% 96.86 kB 96.92 kB
facebook-www/ReactDOMForked-dev.modern.js +0.29% 1,314.60 kB 1,318.41 kB +0.29% 285.58 kB 286.41 kB
facebook-www/ReactDOM-dev.modern.js +0.29% 1,314.60 kB 1,318.41 kB +0.29% 285.58 kB 286.41 kB
facebook-www/ReactDOM-profiling.classic.js +0.29% 558.91 kB 560.52 kB +0.07% 99.02 kB 99.08 kB
facebook-www/ReactDOMForked-profiling.classic.js +0.29% 558.91 kB 560.52 kB +0.07% 99.02 kB 99.08 kB
facebook-www/ReactDOMForked-dev.classic.js +0.28% 1,339.45 kB 1,343.26 kB +0.28% 290.12 kB 290.94 kB
facebook-www/ReactDOM-dev.classic.js +0.28% 1,339.45 kB 1,343.26 kB +0.28% 290.12 kB 290.94 kB
oss-stable-semver/react-dom/umd/react-dom.production.min.js +0.27% 153.15 kB 153.57 kB +0.10% 49.51 kB 49.57 kB
oss-stable/react-dom/umd/react-dom.production.min.js +0.27% 153.17 kB 153.59 kB +0.10% 49.51 kB 49.56 kB
oss-stable-semver/react-dom/cjs/react-dom.production.min.js +0.27% 153.12 kB 153.54 kB +0.13% 48.80 kB 48.87 kB
oss-stable/react-dom/cjs/react-dom.production.min.js +0.27% 153.14 kB 153.56 kB +0.13% 48.80 kB 48.87 kB
oss-experimental/react-dom/umd/react-dom.production.min.js +0.27% 155.08 kB 155.50 kB +0.17% 50.20 kB 50.28 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.27% 155.06 kB 155.48 kB +0.11% 49.41 kB 49.46 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.production.min.js +0.26% 159.47 kB 159.88 kB +0.15% 51.26 kB 51.33 kB
oss-stable-semver/react-dom/umd/react-dom.profiling.min.js +0.26% 161.95 kB 162.37 kB +0.07% 51.84 kB 51.87 kB
oss-stable/react-dom/umd/react-dom.profiling.min.js +0.26% 161.98 kB 162.39 kB +0.08% 51.83 kB 51.87 kB
oss-stable-semver/react-dom/cjs/react-dom.profiling.min.js +0.26% 162.60 kB 163.02 kB +0.14% 51.31 kB 51.38 kB
oss-stable/react-dom/cjs/react-dom.profiling.min.js +0.26% 162.62 kB 163.04 kB +0.14% 51.31 kB 51.38 kB
oss-experimental/react-dom/umd/react-dom.profiling.min.js +0.26% 163.88 kB 164.30 kB +0.15% 52.51 kB 52.59 kB
oss-experimental/react-dom/cjs/react-dom.profiling.min.js +0.25% 164.54 kB 164.96 kB +0.10% 51.92 kB 51.97 kB

Generated by 🚫 dangerJS against 401230e

@acdlite acdlite force-pushed the allow-uncached-io-to-stablize branch 3 times, most recently from b54bb03 to 5ce16df Compare October 29, 2022 02:16
@acdlite acdlite marked this pull request as ready for review October 31, 2022 19:09
@acdlite acdlite force-pushed the allow-uncached-io-to-stablize branch from 5ce16df to 4cc9c19 Compare November 1, 2022 17:47
// If this fiber just suspended, it's possible the data is already
// cached. Yield to the main thread to give it a chance to ping. If
// it does, we can retry immediately without unwinding the stack.
workInProgressSuspendedReason = SuspendedAndReadyToUnwind;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right here is where I'll eventually add the microtask thingy for discrete updates

Initial draft. I need to test this more.

If a promise is passed to `use`, but the I/O isn't cached, we should
still be able to unwrap it.

This already worked in Server Components, and during SSR.

For Fiber (in the browser), before this fix the state would get lost
between attempts unless the promise resolved immediately in a microtask,
which requires IO to be cached. This was due to an implementation quirk
of Fiber where the state is reset as soon as the stack unwinds. The
workaround is to suspend the entire Fiber work loop until the
promise resolves.

The Server Components and SSR runtimes don't require a workaround: they
can maintain multiple parallel child tasks and reuse the state
indefinitely across attempts. That's ideally how Fiber should work, too,
but it will require larger refactor.

The downside of our approach in Fiber is that it won't "warm up" the
siblings while you're suspended, but to avoid waterfalls you're supposed
to hoist data fetches higher in the tree regardless. But we have other
ideas for how we can add this back in the future. (Though again, this
doesn't affect Server Components, which already have the ideal
behavior.)
@acdlite acdlite force-pushed the allow-uncached-io-to-stablize branch from 4cc9c19 to 401230e Compare November 1, 2022 18:17
if (suspenseHandler !== null && suspenseHandler.tag === SuspenseComponent) {
const currentSuspenseHandler = suspenseHandler.alternate;
const nextProps: SuspenseProps = suspenseHandler.memoizedProps;
if (isBadSuspenseFallback(currentSuspenseHandler, nextProps)) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we know this based on the Suspense context?

Copy link
Collaborator Author

@acdlite acdlite Nov 1, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The context stores the nearest "active" handler but it doesn't current track whether it's an avoided fallback condition, though it could. But that's effectively what this check does. It also checks if it's inside an offscreen tree:

export function isBadSuspenseFallback(
current: Fiber | null,
nextProps: SuspenseProps,
): boolean {
// Check if this is a "bad" fallback state or a good one. A bad fallback state
// is one that we only show as a last resort; if this is a transition, we'll
// block it from displaying, and wait for more data to arrive.
if (current !== null) {
const prevState: SuspenseState = current.memoizedState;
const isShowingFallback = prevState !== null;
if (!isShowingFallback && !isCurrentTreeHidden()) {
// It's bad to switch to a fallback if content is already visible
return true;
}
}
if (
enableSuspenseAvoidThisFallback &&
nextProps.unstable_avoidThisFallback === true
) {
// Experimental: Some fallbacks are always bad
return true;
}
return false;
}

@acdlite acdlite merged commit 36426e6 into facebook:main Nov 1, 2022
GrinZero added a commit to GrinZero/react that referenced this pull request Nov 7, 2022
* '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
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Nov 7, 2022
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
rickhanlonii pushed a commit that referenced this pull request Dec 3, 2022
Initial draft. I need to test this more.

If a promise is passed to `use`, but the I/O isn't cached, we should
still be able to unwrap it.

This already worked in Server Components, and during SSR.

For Fiber (in the browser), before this fix the state would get lost
between attempts unless the promise resolved immediately in a microtask,
which requires IO to be cached. This was due to an implementation quirk
of Fiber where the state is reset as soon as the stack unwinds. The
workaround is to suspend the entire Fiber work loop until the promise
resolves.

The Server Components and SSR runtimes don't require a workaround: they
can maintain multiple parallel child tasks and reuse the state
indefinitely across attempts. That's ideally how Fiber should work, too,
but it will require larger refactor.

The downside of our approach in Fiber is that it won't "warm up" the
siblings while you're suspended, but to avoid waterfalls you're supposed
to hoist data fetches higher in the tree regardless. But we have other
ideas for how we can add this back in the future. (Though again, this
doesn't affect Server Components, which already have the ideal
behavior.)
OlimpiaZurek pushed a commit to OlimpiaZurek/react-native that referenced this pull request May 22, 2023
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants