我刚开始尝试 React 钩子,我想知道如何防止子组件在父组件重新渲染时重新渲染。我正在寻找类似于在componentDidUpdate
. 我的问题似乎源于我在子组件中调用的单击处理程序以更改父组件中的状态。由于该函数是在父组件中创建的,因此它在每个父渲染上创建新的,这会触发子组件中的 prop 更改,然后导致子组件重新渲染(我认为)。下面是一些示例代码来帮助说明这种情况。
function Parent() {
const [item, setItem] = useState({ name: "item", value: 0 });
const handleChangeItem = () => {
const newValue = item.value + 1;
setItem({ ...item, value: newValue });
};
return <Child item={item} changeItem={handleChangeItem} />;
}
const Child = React.memo(function Child({ item, changeItem }) {
function handleClick(){
changeItem();
}
return (
<div>
Name: {item.name} Value: {item.value}
<button onClick={handleClick}>change state in parent</button>
</div>
);
});
每次父组件渲染时如何防止子组件渲染?handleChangeItem
父级是否应该住在其他地方,以便不会在每次渲染时重新创建?如果是这样,它如何访问item
和setItem
返回useState
?
我对react还很陌生,刚刚开始玩钩子,所以我可能错过了一些明显的东西。