Skip to content

Commit

Permalink
Exclude forwardRef and memo from stack frames (#18559)
Browse files Browse the repository at this point in the history
We can't patch the row. We could give these their own "built-in" stack
frame since they're conceptually HoCs. However, from a debugging
perspective this is not very useful meta data and quite noisy. So I'm
just going to exclude them.
  • Loading branch information
sebmarkbage committed Apr 9, 2020
1 parent 26fc164 commit cbab25b
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
3 changes: 0 additions & 3 deletions packages/react-reconciler/src/ReactFiberComponentStack.js
Expand Up @@ -17,7 +17,6 @@ import {
FunctionComponent,
IndeterminateComponent,
ForwardRef,
MemoComponent,
SimpleMemoComponent,
Block,
ClassComponent,
Expand Down Expand Up @@ -50,8 +49,6 @@ function describeFiber(fiber: Fiber): string {
return describeFunctionComponentFrame(fiber.type, source, owner);
case ForwardRef:
return describeFunctionComponentFrame(fiber.type.render, source, owner);
case MemoComponent:
return describeFunctionComponentFrame(fiber.type.type, source, owner);
case Block:
return describeFunctionComponentFrame(fiber.type._render, source, owner);
case ClassComponent:
Expand Down
16 changes: 13 additions & 3 deletions packages/react-reconciler/src/__tests__/ReactMemo-test.js
Expand Up @@ -392,12 +392,20 @@ describe('memo', () => {
Outer.defaultProps = {outer: 0};

// No warning expected because defaultProps satisfy both.
ReactNoop.render(<Outer />);
ReactNoop.render(
<div>
<Outer />
</div>,
);
expect(Scheduler).toFlushWithoutYielding();

// Mount
expect(() => {
ReactNoop.render(<Outer inner="2" middle="3" outer="4" />);
ReactNoop.render(
<div>
<Outer inner="2" middle="3" outer="4" />
</div>,
);
expect(Scheduler).toFlushWithoutYielding();
}).toErrorDev([
'Invalid prop `outer` of type `string` supplied to `Inner`, expected `number`.',
Expand All @@ -408,7 +416,9 @@ describe('memo', () => {
// Update
expect(() => {
ReactNoop.render(
<Outer inner={false} middle={false} outer={false} />,
<div>
<Outer inner={false} middle={false} outer={false} />
</div>,
);
expect(Scheduler).toFlushWithoutYielding();
}).toErrorDev([
Expand Down
4 changes: 3 additions & 1 deletion packages/shared/ReactComponentStackFrame.js
Expand Up @@ -121,14 +121,16 @@ export function describeUnknownElementTypeFrameInDEV(
case REACT_FORWARD_REF_TYPE:
return describeFunctionComponentFrame(type.render, source, ownerFn);
case REACT_MEMO_TYPE:
return describeFunctionComponentFrame(type.type, source, ownerFn);
// Memo may contain any component type so we recursively resolve it.
return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
case REACT_BLOCK_TYPE:
return describeFunctionComponentFrame(type._render, source, ownerFn);
case REACT_LAZY_TYPE: {
const lazyComponent: LazyComponent<any, any> = (type: any);
const payload = lazyComponent._payload;
const init = lazyComponent._init;
try {
// Lazy may contain any component type so we recursively resolve it.
return describeUnknownElementTypeFrameInDEV(
init(payload),
source,
Expand Down

0 comments on commit cbab25b

Please sign in to comment.