From b0dd9ac91f748bdda317446bc53febdbbe7991fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=AA=A8?= Date: Wed, 24 Jul 2024 23:09:37 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20React.memo=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=20compare=20=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/react-reconciler/src/beginWork.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-reconciler/src/beginWork.ts b/packages/react-reconciler/src/beginWork.ts index 71b3201..1813abc 100644 --- a/packages/react-reconciler/src/beginWork.ts +++ b/packages/react-reconciler/src/beginWork.ts @@ -134,6 +134,8 @@ function updateMemoComponent(wip: FiberNode, renderLane: Lane) { const current = wip.alternate; const nextProps = wip.pendingProps; const Component = wip.type.type; + // compare 比较函数 + const compare = wip.type.compare === null ? shallowEqual : wip.type.compare; if (current !== null) { const prevProps = current.memoizedProps; @@ -141,7 +143,7 @@ function updateMemoComponent(wip: FiberNode, renderLane: Lane) { // state context if (!checkScheduledUpdateOrContext(current, renderLane)) { // 浅比较props - if (shallowEqual(prevProps, nextProps) && current.ref === wip.ref) { + if (compare(prevProps, nextProps) && current.ref === wip.ref) { didReceiveUpdate = false; wip.pendingProps = prevProps;