【发布时间】:2022-04-21 10:23:05
【问题描述】:
我试图了解 react useEffect 如何处理对象。
这里有一个例子可以帮助我演示我的问题:
export function UseEffectHook() {
const initialState = {
firstName: "Joe",
lastName: "Smith",
address: {
home: "123 street"
}
};
const [user, setUser] = useState(initialState);
const [count, setCount] = useState(0);
useEffect(() => {
console.log("triggered");
}, [user]);
return (
<div>
<p>useEffect - Practice with different deps</p>
{JSON.stringify(user)}
<label>Firstname:</label>
<input
type="text"
onChange={e => setUser({ ...user, firstName: e.target.value })}
/>
<br />
<label>Lastname:</label>
<input
type="text"
onChange={e => setUser({ ...user, lastName: e.target.value })}
/>
<button onClick={() => setCount(count + 1)}>Button</button>
</div>
);
}
我已经读过,将对象作为依赖项放在 useEffect 挂钩中不起作用,因为对象是如何在重新渲染之间进行比较的。
我最初的想法是在这个例子中点击按钮和更新计数也应该导致 useEffect 钩子被更新。情况并非如此,useEffect 不会重新运行。
我无法找到足够人为的示例来帮助演示 useEffect 何时以及为何使用对象重新运行。任何帮助将不胜感激。
【问题讨论】:
-
如果想让
count触发useEffect,需要添加到依赖数组:[user, count] -
也许我的例子太做作而没有效果,但我知道添加计数会触发
useEffect。我的目标是查看何时以及如何将对象添加到useEffect导致重新渲染,因为在 js 中比较对象的方式 -
我刚刚对其进行了测试,它也适用于对象
标签: reactjs react-hooks