Я только начал экспериментировать с перехватчиками React, и мне интересно, как я могу предотвратить повторный рендеринг дочернего компонента при повторном рендеринге родительского.Я ищу что-то похожее на возвращение false в componentDidUpdate
.Кажется, моя проблема связана с обработчиком щелчков, который я вызываю в дочернем компоненте, чтобы изменить состояние родительского компонента.Поскольку функция создается в родительском компоненте, она создается по-новому на каждом родительском рендере, что вызывает изменение реквизита в дочернем компоненте, что затем приводит к повторному рендерингу дочернего элемента (я думаю) .Вот пример кода, который поможет проиллюстрировать ситуацию.
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
?
Я довольно новичок, чтобы реагировать, и я только начал играть с хуками, поэтому я, вероятно, упускаю что-то очевидное.