Skip to content

Commit 0083e4b

Browse files
committed
Only resolve props if element type differs
1 parent b65fac9 commit 0083e4b

1 file changed

Lines changed: 28 additions & 17 deletions

File tree

packages/react-reconciler/src/ReactFiberCommitWork.js

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,18 @@ function commitBeforeMutationLifeCycles(
229229
const prevState = current.memoizedState;
230230
startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');
231231
const instance = finishedWork.stateNode;
232-
instance.props = resolveDefaultProps(
233-
finishedWork.type,
234-
finishedWork.memoizedProps,
235-
);
232+
instance.props =
233+
finishedWork.elementType === finishedWork.type
234+
? finishedWork.memoizedProps
235+
: resolveDefaultProps(
236+
finishedWork.type,
237+
finishedWork.memoizedProps,
238+
);
236239
instance.state = finishedWork.memoizedState;
237240
const snapshot = instance.getSnapshotBeforeUpdate(
238-
resolveDefaultProps(finishedWork.type, prevProps),
241+
finishedWork.elementType === finishedWork.type
242+
? prevProps
243+
: resolveDefaultProps(finishedWork.type, prevProps),
239244
prevState,
240245
);
241246
if (__DEV__) {
@@ -349,24 +354,30 @@ function commitLifeCycles(
349354
if (finishedWork.effectTag & Update) {
350355
if (current === null) {
351356
startPhaseTimer(finishedWork, 'componentDidMount');
352-
instance.props = resolveDefaultProps(
353-
finishedWork.type,
354-
finishedWork.memoizedProps,
355-
);
357+
instance.props =
358+
finishedWork.elementType === finishedWork.type
359+
? finishedWork.memoizedProps
360+
: resolveDefaultProps(
361+
finishedWork.type,
362+
finishedWork.memoizedProps,
363+
);
356364
instance.state = finishedWork.memoizedState;
357365
instance.componentDidMount();
358366
stopPhaseTimer();
359367
} else {
360-
const prevProps = resolveDefaultProps(
361-
finishedWork.type,
362-
current.memoizedProps,
363-
);
368+
const prevProps =
369+
finishedWork.elementType === finishedWork.type
370+
? current.memoizedProps
371+
: resolveDefaultProps(finishedWork.type, current.memoizedProps);
364372
const prevState = current.memoizedState;
365373
startPhaseTimer(finishedWork, 'componentDidUpdate');
366-
instance.props = resolveDefaultProps(
367-
finishedWork.type,
368-
finishedWork.memoizedProps,
369-
);
374+
instance.props =
375+
finishedWork.elementType === finishedWork.type
376+
? finishedWork.memoizedProps
377+
: resolveDefaultProps(
378+
finishedWork.type,
379+
finishedWork.memoizedProps,
380+
);
370381
instance.state = finishedWork.memoizedState;
371382
instance.componentDidUpdate(
372383
prevProps,

0 commit comments

Comments
 (0)