在useEffect的依赖项中优先使用原始值
在使用React时,有时候需要根据条件来触发effect。在大多数情况下,只需要将依赖项数组传递给useEffect()
即可实现。但是,在某些情况下,这可能会导致不必要的性能下降。
当整个对象作为依赖项传递时,而实际上只需要一个原始值时,就会出现这种问题。由于对象的特性是按引用传递的,比较依赖项时总会触发重新运行。这最终导致effect不必要地运行。
const CartItem = ({ item }) => {
useEffect(() => {
console.log(`${item.name}的数量已更改为${item.quantity}。`);
}, [item]);
return (
<>
<h3>{item.name}</h3>
<span>
{item.price} x {item.quantity}
</span>
</>
);
};
解决方案是只使用effect所依赖的对象的部分属性。通常,这些属性是原始值,比如字符串和数字。将它们的值与先前的依赖项进行比较更高效,避免了不必要的重新运行。
const CartItem = ({ item }) => {
const { name, quantity, price } = item;
useEffect(() => {
console.log(`${name}的数量已更改为${quantity}。`);
}, [name, quantity]);
return (
<>
<h3>{name}</h3>
<span>
{price} x {quantity}
</span>
</>
);
};