1. 什么是useEffect Hook?
可以把 useEffect Hook 看做componentDidMount
,componentDidUpdate
和 componentWillUnmount
这三个生命周期函数的组合
2. useEffect Hook特点?
可以设置依赖, 只有依赖发生变化的时候才执行
const [nameState, setNameState] = useState('ccnu'); const [ageState, setAgeState] = useState(0); useEffect(()=>{ // componentDidMount // componentDidUpdate console.log('组件被挂载或者组件更新完成'); return ()=>{ // componentWillUnmount console.log('组件即将被卸载'); } }); return ( <div> <p>{nameState}</p> <button onClick={()=>{setNameState('it666')}}>修改</button> <p>{ageState}</p> <button onClick={()=>{setAgeState(ageState + 1)}}>增加</button> <button onClick={()=>{setAgeState(ageState - 1)}}>减少</button> <hr/> </div> ) } function App() { const [isShowState, setIsShowState] = useState(true); return ( <div> {isShowState && <Home/>} <button onClick={()=>{setIsShowState(!isShowState)}}>切换</button> </div> ) } export default App;
useEffect Hook对比类组件生命周期方法优势
有分而治之的思想,易于拆分,可以将某一数据的处理全部放在一个effect中
function Home() { const [nameState, setNameState] = useState('lnj'); const [ageState, setAgeState] = useState(0); useEffect(()=>{ // 组件被挂载 console.log('修改DOM'); }); useEffect(()=>{ // 组件被挂载 console.log('注册监听'); return ()=>{ console.log('移出监听'); } }); useEffect(()=>{ console.log('发送网络请求'); }); return ( <div> <p>{nameState}</p> <button onClick={()=>{setNameState('it666')}}>修改</button> <p>{ageState}</p> <button onClick={()=>{setAgeState(ageState + 1)}}>增加</button> <button onClick={()=>{setAgeState(ageState - 1)}}>减少</button> <hr/> </div> ) } function App() { const [isShowState, setIsShowState] = useState(true); return ( <div> {isShowState && <Home/>} <button onClick={()=>{setIsShowState(!isShowState)}}>切换</button> </div> ) } export default App;