我的 React 代码中有以下结构:
const Parent: React.FC<ParentProps> = (props) => {
const [value1, setValue1] = useState<any>(null);
return (
<div>
<SomeContextProvider
contextElem1={value1}
contextElem2={value2}
>
...some code here
<Child
prop1={value3}
prop2={value4}
/>
</SomeContextProvider>
</div>
);
}
export default Parent;
const Child: React.FC<ChildProps> = ({ prop1, prop2 }) => {
return (
<div>
{prop1} {prop2}
</div>
);
}
const propsAreEqual = (prevProps: ChildProps, nextProps: ChildProps) => {
return true;
}
export default React.memo(Child, propsAreEqual);
如您所见:
Child
组件不消耗 SomeContextChild
组件仅用 SomeContextProvider 包装(这是否意味着孩子正在使用上下文?)
这是场景:
- 重新
Parent
渲染时,Child
即使Child
不消耗SomeContext
并propsAreEqual
返回,也会重新渲染true
。 - 当我移动
Child
到外部范围时,React.memo
按预期工作并防止重新渲染Child
何时Parent
重新渲染。
为什么Child
在不消耗上下文的情况下重新渲染?不React.memo
应该防止重新渲染吗?我想念这些概念的什么?