useeffect的用法是:useEffect就是指定一个副效应函数,组件每渲染一次,该函数就自动执行一次。组件首次在网页 DOM 加载后,副效应函数也会执行。
useEffect使用时有以下4种情况
1、不传递
useEffect不传递第二个参数会导致每次渲染都会运行useEffect。然后,当它运行时,它获取数据并更新状态。然后,一旦状态更新,组件将重新呈现,这将再次触发useEffect,这就是问题所在,useEffect 不断运行。
const [num, setNum] = useState(0);
useEffect(()=>{
setNum(num+1);
console.log(num+1)
}) // 所有更新都执行
2、传递空数组
const [num, setNum] = useState(0);
useEffect(() => {
setNum(num+1);
console.log(num+1)
}, []) // 仅在挂载和卸载的时候执行
3、传递一个值
const [num, setNum] = useState(0);
useEffect(()=>{
setNum(num+1);
console.log(num+1)
},[num]) // num更新时执行,注意不要在useEffect中更新num的值,否则useEffect会一直运行
4、传递多个
含义不懂,此处仅作记录,有机会再来完善
// 监听num的更改
//setNum是useState返回的setter,所以不会在每次渲染时重新创建它,因此effect只会运行一次
const [num, setNum] = useState(0);
useEffect(() => {
setNum(num + 1);
console.log(num + 1)
}, [num, setNum])