2 Effect Hook
生活随笔
收集整理的這篇文章主要介紹了
2 Effect Hook
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
副作用:和外部有交互
純函數(shù):相同的輸入一定會得到相同的輸出
Effect Hook可以讓你在函數(shù)組件中執(zhí)行副作用操作
類組件中處理副作用
- 在componentDidMount/componentDidUpdate聲明周期中(真實dom構(gòu)建以前)
useEffect執(zhí)行時機(jī)
- 初次渲染之后 didMount(真實dom構(gòu)建以后)
- 渲染更新時 didUpdate
- 是異步的,在回調(diào)函數(shù)中拿到更新的state
存在清理函數(shù)
組件更新
useEffect(() => {console.log('useEffect')return () => {console.log('clear Effect')} }) import { useState, useEffect } from 'react' export default function App(props) {const [count, setCount] = useState(() => {console.log(1); // 惰性初始化,只會打印一次return 1});useEffect(() => {// 持續(xù)遞增console.log('useEffect')let timer = setInterval(() => { // 2. 每一次副作用都會重新初始化一個timersetCount(count + 1)}, 1000)return () => {clearInterval(timer) // 1.閉包 第二次運(yùn)行時,先清理上一次的timerconsole.log('clear Effect')}})return (<><h1>{count}</h1></>) }組件銷毀
import { useState, useEffect } from 'react' function Test() {const [count, setCount] = useState(1);useEffect(() => {console.log('useEffect')return () => {console.log('clear Effect') // 組件更新、銷毀時執(zhí)行}})return (<><h1>{count}</h1><button onClick={() => setCount(count + 1)}>add</button></>) } export default function App() {const [show, setShow] = useState(true)return (<>{show && <Test />}<button onClick={() => setShow(!show)}>changeShow</button></>) }只在didMount時執(zhí)行
依賴項
- 指定當(dāng)前effect函數(shù)所需要的依賴項
- 若依賴項是[],在初次渲染和卸載的時候執(zhí)行
- 若依賴項不變,effect不執(zhí)行
- 存在依賴項 && 依賴項更新時,effect執(zhí)行
競態(tài)問題
- 接口返回的時長不同,后返回的覆蓋了之前的數(shù)據(jù),導(dǎo)致沒有渲染正確的結(jié)果
現(xiàn)象:結(jié)果3覆蓋了4
總結(jié)
以上是生活随笔為你收集整理的2 Effect Hook的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux awr 日志,Linux平台
- 下一篇: 3 useReducer及其实现