App.js
importReact, { useState, useEffect } from‘react’ /** * useEffect * 挂载 更新 卸载 */ function Header() { const [strState, setStrState] = useState(‘拉勾教育’) const [numState, setNumState] = useState(10) //第一个参数是函数,函数体是挂载和更新的操作,卸载通过return的函数执行 useEffect(() => { console.log(‘挂载与更新操作完成了’) return () => { console.log(‘卸载的时候执行’) } }, [strState]) //第二个参数是数组,只有[]中的依赖变化时useEffect才会更新 return ( <div> <p>{strState}<buttononClick={() => { setStrState(‘大前端’) }}>修改字符</button></p> <p>{numState}<buttononClick={() => { setNumState(numState + 1) }}>修改数值</button></p> </div> ) } functionApp() { const [isShow, setIsShow] = useState(true) return ( <div> {isShow && <Header/>} <hr/> <buttononClick={() => { setIsShow(!isShow) }}>切换</button> </div> ) } exportdefaultAppuseEffect 快速上手
useEffect 可以接收两个参数,分别是回调函数与依赖数组,如下面代码所示: useEffect(callBack, []) useEffect 用什么姿势来调用,本质上取决于你想用它来达成什么样的效果。下面我们就以效果为线索,简单介绍 useEffect 的调用规则。- 每一次渲染后都执行的副作用:传入回调函数,不传依赖数组。调用形式如下所示:
- 仅在挂载阶段执行一次的副作用:传入回调函数,且这个函数的返回值不是一个函数,同时传入一个空数组。调用形式如下所示:
- 仅在挂载阶段和卸载阶段执行的副作用:传入回调函数,且这个函数的返回值是一个函数,同时传入一个空数组。假如回调函数本身记为 A, 返回的函数记为 B,那么将在挂载阶段执行 A,卸载阶段执行 B。调用形式如下所示:
- 每一次渲染都触发,且卸载阶段也会被触发的副作用:传入回调函数,且这个函数的返回值是一个函数,同时不传第二个参数。如下所示:
- 根据一定的依赖条件来触发的副作用:传入回调函数,同时传入一个非空的数组,如下所示: