useEffect 可以接受 2 个参数,第一个是函数,第二个是数组。
一旦组件被挂载,该函数就会被调用,但是 useEffect 的扩展特性是它有一种敏感列表,如果第二个数组中的任何参数发生变化,它可以再次运行。也让它成为 componentDidUpdate。
但是没有 useEffect 的 console.log() 会按照它的运行方式运行。你没有任何控制权。这是一个简单的例子:
useEffect(() => {
console.log('count=', count);
}, [count]); // Only re-run the effect if count changes
它还有一个 cleanUp 方法,你可以(例如)写一个时间间隔,当组件被卸载时它可以被清除。您可以在 useEffect 中添加一个名为 'return' 的函数,就大功告成了!
let timer;
useEffect(()=>{
timer = setInterval(() => console.log('hello!'), 1000);
return()=>clearImmediate(timer);
})
现在,当组件被卸载时,间隔会被清除。
现在,如果我们在数组中传递一些东西让 useEffect 监听它们的变化,当 useEffect 再次使用新值运行时,组件将执行 cleanUp 方法。
这是一个例子:
let timer;
useEffect(()=>{
timer = setInterval(() => console.log('do you need something Mr./Mrs. ' + someOne + ' ?'), 1000);
return()=>clearImmediate(timer);
},[someOne]);
我们制作了一个计时器,它会每秒询问某人是否需要某事。现在,如果“someOne”发生变化,它会停止询问前一个,并开始每秒询问新的“someOne”。
顺便说一句,您可以将函数命名为“返回”任何您想要的名称,或者您可以只传递一个箭头函数。