React.memo 包装一个组件,使其在 props 与前一次渲染浅相等时跳过重新渲染。默认情况下,每当其父级渲染时,子组件就会重新渲染;memo 在 props 实际未改变时会短路这一过程。
jsx
= .( () {
;
});
memo 执行浅比较。如果父级在每次渲染时传递一个新的对象/数组/函数,比较总是会失败,memo 也就无法生效:
function List({ items }) {
// ❌ a NEW function every render → Row's onSelect prop always "changes"
return items.map(i => <Row key={i.id} item={i} onSelect={id => pick(id)} />);
}
通过 useCallback 稳定函数来修复:
const onSelect = useCallback(id => pick(id), []); // same reference across renders
return items.map(i => <Row key={i.id} item={i} onSelect={onSelect} />);