mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
fix: devtools source field disappears after component remount (#27297)
## Summary Fixes: https://github.com/facebook/react/issues/27296 On actions that cause a component to change its signature, and therefore to remount, the `_debugSource` property of the fiber updates in delay and causes the `devtools` source field to vanish. This issue happens in https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberBeginWork.js ```js function beginWork( current: Fiber | null, workInProgress: Fiber, renderLanes: Lanes, ): Fiber | null { if (__DEV__) { if (workInProgress._debugNeedsRemount && current !== null) { // This will restart the begin phase with a new fiber. return remountFiber( current, workInProgress, createFiberFromTypeAndProps( workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes, ), ); } } // ... ``` `remountFiber` uses the 3rd parameter as the new fiber (`createFiberFromTypeAndProps(...)`), but this parameter doesn’t contain a `_debugSource`. ## How did you test this change? Tested by monkey patching `./node_modules/react-dom/cjs/react-dom.development.js`: <img width="1749" alt="image" src="https://github.com/facebook/react/assets/75563024/ccaf7fab-4cc9-4c05-a48b-64db6f55dc23"> https://github.com/facebook/react/assets/75563024/0650ae5c-b277-44d1-acbb-a08d98bd38e0
This commit is contained in:
+6
-1
@@ -7,7 +7,7 @@
|
||||
* @flow
|
||||
*/
|
||||
|
||||
import type {ReactElement} from 'shared/ReactElementType';
|
||||
import type {ReactElement, Source} from 'shared/ReactElementType';
|
||||
import type {ReactFragment, ReactPortal, ReactScope} from 'shared/ReactTypes';
|
||||
import type {Fiber} from './ReactInternalTypes';
|
||||
import type {RootTag} from './ReactRootTags';
|
||||
@@ -490,6 +490,7 @@ export function createFiberFromTypeAndProps(
|
||||
type: any, // React$ElementType
|
||||
key: null | string,
|
||||
pendingProps: any,
|
||||
source: null | Source,
|
||||
owner: null | Fiber,
|
||||
mode: TypeOfMode,
|
||||
lanes: Lanes,
|
||||
@@ -643,6 +644,7 @@ export function createFiberFromTypeAndProps(
|
||||
fiber.lanes = lanes;
|
||||
|
||||
if (__DEV__) {
|
||||
fiber._debugSource = source;
|
||||
fiber._debugOwner = owner;
|
||||
}
|
||||
|
||||
@@ -654,8 +656,10 @@ export function createFiberFromElement(
|
||||
mode: TypeOfMode,
|
||||
lanes: Lanes,
|
||||
): Fiber {
|
||||
let source = null;
|
||||
let owner = null;
|
||||
if (__DEV__) {
|
||||
source = element._source;
|
||||
owner = element._owner;
|
||||
}
|
||||
const type = element.type;
|
||||
@@ -665,6 +669,7 @@ export function createFiberFromElement(
|
||||
type,
|
||||
key,
|
||||
pendingProps,
|
||||
source,
|
||||
owner,
|
||||
mode,
|
||||
lanes,
|
||||
|
||||
@@ -531,6 +531,7 @@ function updateMemoComponent(
|
||||
Component.type,
|
||||
null,
|
||||
nextProps,
|
||||
null,
|
||||
workInProgress,
|
||||
workInProgress.mode,
|
||||
renderLanes,
|
||||
@@ -4013,6 +4014,7 @@ function beginWork(
|
||||
workInProgress.type,
|
||||
workInProgress.key,
|
||||
workInProgress.pendingProps,
|
||||
workInProgress._debugSource || null,
|
||||
workInProgress._debugOwner || null,
|
||||
workInProgress.mode,
|
||||
workInProgress.lanes,
|
||||
|
||||
@@ -1697,6 +1697,7 @@ function detachFiberAfterEffects(fiber: Fiber) {
|
||||
fiber.stateNode = null;
|
||||
|
||||
if (__DEV__) {
|
||||
fiber._debugSource = null;
|
||||
fiber._debugOwner = null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user