useEffect
зависимости приведут к изменению, если то, что мы предоставляем, отличается. Это происходит, если мы передаем одну и ту же ссылку с другим значением или если мы передаем другую ссылку.
const newData = {
value: MY_DATAVALUE
};
setData(newData);
data
теперь ссылается на другой объект, тогда как клавиша value
ссылается на то же, что и предыдущее значение.
Это означает, что этот хук сработает:
useEffect(() => {
console.log("data changed");
}, [data]);
Пока это не сработает:
useEffect(() => {
console.log("data.value changed");
}, [data.value]);
Пока это то, что Вы объяснили в обоих пунктах.
В случае дочернего объекта, объект props
является новой ссылкой на каждый рендер.
По этой причине этот хук всегда будет срабатывать:
useEffect(() => {
console.log("child props changed");
}, [props]);
Пока этот хук не будет срабатывать:
const MY_DATAVALUE = {
a: 1,
b: 2
};
// In Parent...
<Child value={MY_DATAVALUE} />
// In Child...
useEffect(() => {
console.log("child value changed");
}, [props.value]);