useEffect
可以在函数组件中执行副作用操作
副作用操作:数据获取,设置订阅,手动更改 React 组件中的 DOM 等
控制执行
React 会等待浏览器完成画面渲染之后才会延迟调用 useEffect
useEffect(()=>{})
,不传第二个参数(默认情况下)每次渲染完成后都执行
useEffect(()=>{},[x])
,如果传入[x]作为第二个参数,当渲染结束后,React把渲染前的[x]与渲染后的[x]做一个对比,如果x===x,那么React回跳过effect。
如果数组中有多个元素,只要任意一个发生变化,React也会执行effect。
useEffect(()=>{},[])
,如果第二个参数是一个空数组[],那么effect仅在组件挂载和卸载时执行。
自定义Hook
实现第一次渲染不执行,此后每一次渲染后都执行
const useUpdate=(fn,dep)=>{
const [count,setCount]= useState(0)
useEffect(()=>{
setCount(x=>x+1)
},[dep])
useEffect(()=>{
if(count>1){
fn()
}
},[count,fn])
}