Skip to content

Commit

Permalink
Let text and fragment nodes inherit their parent as their owner
Browse files Browse the repository at this point in the history
They don't have their own owner so to get some owner stacks we can use
the parent as the owner.

Effectively this also means using the parent's debugTask for native stacks.

This ensures that createTask is active when a HostText node runs its validation.
  • Loading branch information
sebmarkbage committed Jul 10, 2024
1 parent c07aaee commit 286da47
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
33 changes: 33 additions & 0 deletions packages/react-reconciler/src/ReactChildFiber.js
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,11 @@ function createChildReconciler(
const created = createFiberFromText(textContent, returnFiber.mode, lanes);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
created._debugInfo = currentDebugInfo;
}
return created;
Expand Down Expand Up @@ -630,6 +635,11 @@ function createChildReconciler(
);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
created._debugInfo = currentDebugInfo;
}
return created;
Expand Down Expand Up @@ -665,6 +675,11 @@ function createChildReconciler(
);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
created._debugInfo = currentDebugInfo;
}
return created;
Expand Down Expand Up @@ -729,6 +744,11 @@ function createChildReconciler(
);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
const prevDebugInfo = pushDebugInfo(newChild._debugInfo);
created._debugInfo = currentDebugInfo;
currentDebugInfo = prevDebugInfo;
Expand Down Expand Up @@ -1610,6 +1630,14 @@ function createChildReconciler(
deleteRemainingChildren(returnFiber, currentFirstChild);
const created = createFiberFromText(textContent, returnFiber.mode, lanes);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
created._debugInfo = currentDebugInfo;
}
return created;
}

Expand Down Expand Up @@ -1683,6 +1711,11 @@ function createChildReconciler(
);
created.return = returnFiber;
if (__DEV__) {
// We treat the parent as the owner for stack purposes.
created._debugOwner = returnFiber;
if (enableOwnerStacks) {
created._debugTask = returnFiber._debugTask;
}
created._debugInfo = currentDebugInfo;
}
validateFragmentProps(element, created, returnFiber);
Expand Down
7 changes: 0 additions & 7 deletions packages/react-reconciler/src/ReactFiberComponentStack.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
ForwardRef,
SimpleMemoComponent,
ClassComponent,
HostText,
} from './ReactWorkTags';
import {
describeBuiltInComponentFrame,
Expand Down Expand Up @@ -112,12 +111,6 @@ export function getOwnerStackByFiberInDev(
}
}

if (workInProgress.tag === HostText) {
// Text nodes never have an owner/stack because they're not created through JSX.
// We use the parent since text nodes are always created through a host parent.
workInProgress = (workInProgress.return: any);
}

// The owner stack of the current fiber will be where it was created, i.e. inside its owner.
// There's no actual name of the currently executing component. Instead, that is available
// on the regular stack that's currently executing. However, for built-ins there is no such
Expand Down

0 comments on commit 286da47

Please sign in to comment.