Skip to content

Commit

Permalink
[DevTools] fix useDeferredValue to match reconciler change (#24742)
Browse files Browse the repository at this point in the history
* [DevTools] fix useDeferredValue to match reconciler change

* fixup

* update test to catch original issue

* fix lint

* add safer tests for other composite hooks
  • Loading branch information
mondaychen authored Jun 17, 2022
1 parent a7c322c commit 72ebc70
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
8 changes: 2 additions & 6 deletions packages/react-debug-tools/src/ReactDebugHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -310,15 +310,11 @@ function useTransition(): [
}

function useDeferredValue<T>(value: T): T {
// useDeferredValue() composes multiple hooks internally.
// Advance the current hook index the same number of times
// so that subsequent hooks have the right memoized state.
nextHook(); // State
nextHook(); // Effect
const hook = nextHook();
hookLog.push({
primitive: 'DeferredValue',
stackError: new Error(),
value,
value: hook !== null ? hook.memoizedState : value,
});
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,7 @@ describe('ReactHooksInspectionIntegration', () => {
function Foo(props) {
React.useTransition();
const memoizedValue = React.useMemo(() => 'hello', []);
React.useMemo(() => 'not used', []);
return <div>{memoizedValue}</div>;
}
const renderer = ReactTestRenderer.create(<Foo />);
Expand All @@ -566,16 +567,24 @@ describe('ReactHooksInspectionIntegration', () => {
value: 'hello',
subHooks: [],
},
{
id: 2,
isStateEditable: false,
name: 'Memo',
value: 'not used',
subHooks: [],
},
]);
});

it('should support composite useDeferredValue hook', () => {
it('should support useDeferredValue hook', () => {
function Foo(props) {
React.useDeferredValue('abc', {
timeoutMs: 500,
});
const [state] = React.useState(() => 'hello', []);
return <div>{state}</div>;
const memoizedValue = React.useMemo(() => 1, []);
React.useMemo(() => 2, []);
return <div>{memoizedValue}</div>;
}
const renderer = ReactTestRenderer.create(<Foo />);
const childFiber = renderer.root.findByType(Foo)._currentFiber();
Expand All @@ -590,9 +599,16 @@ describe('ReactHooksInspectionIntegration', () => {
},
{
id: 1,
isStateEditable: true,
name: 'State',
value: 'hello',
isStateEditable: false,
name: 'Memo',
value: 1,
subHooks: [],
},
{
id: 2,
isStateEditable: false,
name: 'Memo',
value: 2,
subHooks: [],
},
]);
Expand Down Expand Up @@ -1012,6 +1028,7 @@ describe('ReactHooksInspectionIntegration', () => {
() => {},
);
React.useMemo(() => 'memo', []);
React.useMemo(() => 'not used', []);
return <div />;
}
const renderer = ReactTestRenderer.create(<Foo />);
Expand All @@ -1032,6 +1049,13 @@ describe('ReactHooksInspectionIntegration', () => {
value: 'memo',
subHooks: [],
},
{
id: 2,
isStateEditable: false,
name: 'Memo',
value: 'not used',
subHooks: [],
},
]);
});

Expand All @@ -1043,6 +1067,7 @@ describe('ReactHooksInspectionIntegration', () => {
() => 'snapshot',
);
React.useMemo(() => 'memo', []);
React.useMemo(() => 'not used', []);
return value;
}

Expand All @@ -1064,6 +1089,13 @@ describe('ReactHooksInspectionIntegration', () => {
value: 'memo',
subHooks: [],
},
{
id: 2,
isStateEditable: false,
name: 'Memo',
value: 'not used',
subHooks: [],
},
]);
});
});

0 comments on commit 72ebc70

Please sign in to comment.