mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
[DevTools] Stop mounting empty roots (#34467)
This commit is contained in:
parent
7fc888dde2
commit
a9ad64c852
|
|
@ -2489,7 +2489,7 @@ describe('Store', () => {
|
|||
withErrorsOrWarningsIgnored(['test-only:'], async () => {
|
||||
await act(() => render(<React.Fragment />));
|
||||
});
|
||||
expect(store).toMatchInlineSnapshot(`[root]`);
|
||||
expect(store).toMatchInlineSnapshot(``);
|
||||
expect(store.componentWithErrorCount).toBe(0);
|
||||
expect(store.componentWithWarningCount).toBe(0);
|
||||
});
|
||||
|
|
@ -3083,6 +3083,9 @@ describe('Store', () => {
|
|||
|
||||
it('should handle an empty root', async () => {
|
||||
await actAsync(() => render(null));
|
||||
expect(store).toMatchInlineSnapshot(``);
|
||||
|
||||
await actAsync(() => render(<span />));
|
||||
expect(store).toMatchInlineSnapshot(`[root]`);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5322,12 +5322,12 @@ export function attach(
|
|||
root: FiberRoot,
|
||||
priorityLevel: void | number,
|
||||
) {
|
||||
const current = root.current;
|
||||
const nextFiber = root.current;
|
||||
|
||||
let prevFiber: null | Fiber = null;
|
||||
let rootInstance = rootToFiberInstanceMap.get(root);
|
||||
if (!rootInstance) {
|
||||
rootInstance = createFiberInstance(current);
|
||||
rootInstance = createFiberInstance(nextFiber);
|
||||
rootToFiberInstanceMap.set(root, rootInstance);
|
||||
idToDevToolsInstanceMap.set(rootInstance.id, rootInstance);
|
||||
} else {
|
||||
|
|
@ -5366,31 +5366,26 @@ export function attach(
|
|||
};
|
||||
}
|
||||
|
||||
if (prevFiber !== null) {
|
||||
// TODO: relying on this seems a bit fishy.
|
||||
const wasMounted =
|
||||
prevFiber.memoizedState != null &&
|
||||
prevFiber.memoizedState.element != null;
|
||||
const isMounted =
|
||||
current.memoizedState != null && current.memoizedState.element != null;
|
||||
if (!wasMounted && isMounted) {
|
||||
const nextIsMounted = nextFiber.child !== null;
|
||||
const prevWasMounted = prevFiber !== null && prevFiber.child !== null;
|
||||
if (!prevWasMounted && nextIsMounted) {
|
||||
// Mount a new root.
|
||||
setRootPseudoKey(currentRoot.id, current);
|
||||
mountFiberRecursively(current, false);
|
||||
} else if (wasMounted && isMounted) {
|
||||
setRootPseudoKey(currentRoot.id, nextFiber);
|
||||
mountFiberRecursively(nextFiber, false);
|
||||
} else if (prevWasMounted && nextIsMounted) {
|
||||
if (prevFiber === null) {
|
||||
throw new Error(
|
||||
'Expected a previous Fiber when updating an existing root.',
|
||||
);
|
||||
}
|
||||
// Update an existing root.
|
||||
updateFiberRecursively(rootInstance, current, prevFiber, false);
|
||||
} else if (wasMounted && !isMounted) {
|
||||
updateFiberRecursively(rootInstance, nextFiber, prevFiber, false);
|
||||
} else if (prevWasMounted && !nextIsMounted) {
|
||||
// Unmount an existing root.
|
||||
unmountInstanceRecursively(rootInstance);
|
||||
removeRootPseudoKey(currentRoot.id);
|
||||
rootToFiberInstanceMap.delete(root);
|
||||
}
|
||||
} else {
|
||||
// Mount a new root.
|
||||
setRootPseudoKey(currentRoot.id, current);
|
||||
mountFiberRecursively(current, false);
|
||||
}
|
||||
|
||||
if (isProfiling && isProfilingSupported) {
|
||||
if (!shouldBailoutWithPendingOperations()) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user