useEffect语法讲解
用法
useEffect(effectFn, deps)
能力
useEffect
Hook 相当于 componentDidMount
,componentDidUpdate
和 componentWillUnmount
这三个函数的组合。
可以模拟渲染后、更新后、销毁三个动作。
案例演示
- 渲染后更新标题
useEffect(()=>{
document.title = 'React后台课程'
},[])
- 渲染后更新Count值
const [count, setCount] = useState(0)
useEffect(()=>{
setCount(count+1)
},[])
- 点击按钮,更新name值
const [total, setTotal] = useState(0)
const [count, setCount] = useState(0)
useEffect(()=>{
setTotal(count*5)
},[count])
- 销毁定时器
const [count, setCount] = useState(0)
useEffect(() => {
const T = setInterval(() => {
setCount(count => count + 1)
}, 3000)
return () => {
clearInterval(T)
}
}, [])
- 自定义Hook(获取浏览器宽高)
export function useWindowSize() {
const [size,setSize] = useState({
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight
})
const onResize = useCallback((node)=>{
setSize({
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight
})
},[])
useEffect(()=>{
window.addEventListener('resize',onResize)
return()=>{
window.removeEventListener('resize',onResize)
}
},[])
return [size]
}