在我见过的大多数反应示例中,人们似乎避免将代码直接放入功能组件的主体中,而是将其包装到useEffect(() => {...})
. 例如在官方文档中:
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
为什么这比简单地写更好:
function Example() {
const [count, setCount] = useState(0);
document.title = `You clicked ${count} times`;
return (...);
}
在这两种情况下,文档标题都将在每个渲染上设置。(我相信useEffect()
代码是在渲染之后执行的,但这在这个例子中似乎不相关,对吧)
我理解useEffect()
if 的价值:
- 状态作为第二个参数传递,因此代码不会在每次渲染时执行,而是针对指定的状态更改执行。
- 我们利用了清理机制。
But without that? Is there still a reason to wrap your code into useEffect()
?