dillon1000/react

Commit

Pass ref as normal prop (#28348)

Depends on:

- #28317 
- #28320 

---

Changes the behavior of the JSX runtime to pass through `ref` as a
normal prop, rather than plucking it from the props object and storing
on the element.

This is a breaking change since it changes the type of the receiving
component. However, most code is unaffected since it's unlikely that a
component would have attempted to access a `ref` prop, since it was not
possible to get a reference to one.

`forwardRef` _will_ still pluck `ref` from the props object, though,
since it's extremely common for users to spread the props object onto
the inner component and pass `ref` as a differently named prop. This is
for maximum compatibility with existing code — the real impact of this
change is that `forwardRef` is no longer required.

Currently, refs are resolved during child reconciliation and stored on
the fiber. As a result of this change, we can move ref resolution to
happen only much later, and only for components that actually use them.
Then we can remove the `ref` field from the Fiber type. I have not yet
done that in this step, though.
Browse files
Changed paths34 files
First-parent comparison
M packages/jest-react/src/JestReact.js ModifiedM packages/react-client/src/ReactFlightClient.js ModifiedM packages/react-devtools-shared/src/__tests__/legacy/storeLegacy-v15-test.js ModifiedM packages/react-dom-bindings/src/client/ReactDOMComponent.js ModifiedM packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js ModifiedM packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js ModifiedM packages/react-dom/src/__tests__/ReactCompositeComponent-test.js ModifiedM packages/react-dom/src/__tests__/ReactFunctionComponent-test.js ModifiedM packages/react-dom/src/__tests__/refs-test.js ModifiedM packages/react-noop-renderer/src/createReactNoop.js ModifiedM packages/react-reconciler/src/ReactChildFiber.js ModifiedM packages/react-reconciler/src/ReactFiberBeginWork.js ModifiedM packages/react-reconciler/src/__tests__/ReactFiberRefs-test.js ModifiedM packages/react-reconciler/src/__tests__/ReactIncrementalSideEffects-test.js ModifiedM packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js ModifiedM packages/react-reconciler/src/__tests__/ReactMemo-test.js ModifiedM packages/react-refresh/src/__tests__/ReactFresh-test.js ModifiedM packages/react-server/src/ReactFizzServer.js ModifiedM packages/react-server/src/ReactFlightServer.js ModifiedM packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js ModifiedM packages/react/src/__tests__/ReactCreateElement-test.js ModifiedM packages/react/src/__tests__/ReactElementClone-test.js ModifiedM packages/react/src/__tests__/ReactJSXElementValidator-test.js ModifiedM packages/react/src/__tests__/ReactJSXRuntime-test.js ModifiedM packages/react/src/__tests__/ReactJSXTransformIntegration-test.js ModifiedM packages/react/src/jsx/ReactJSXElement.js ModifiedM packages/shared/ReactFeatureFlags.js ModifiedM packages/shared/forks/ReactFeatureFlags.native-fb.js ModifiedM packages/shared/forks/ReactFeatureFlags.native-oss.js ModifiedM packages/shared/forks/ReactFeatureFlags.test-renderer.js ModifiedM packages/shared/forks/ReactFeatureFlags.test-renderer.native.js ModifiedM packages/shared/forks/ReactFeatureFlags.test-renderer.www.js ModifiedM packages/shared/forks/ReactFeatureFlags.www.js ModifiedM scripts/jest/TestFlags.js Modified
Patch

Files changed

Rendering syntax-highlighted changes…