useEffect

useEffect是一個React Hook函數(shù),用于在React組件中創(chuàng)建不是由事件引起而是由渲染本身引起的操作,比如發(fā)送AJAX請求,更改DOM等
需求:在組件渲染完畢之后,立刻從服務端獲取數(shù)據(jù)并顯示到頁面中。

function App() {
  const [list,setList]=useState([])
  useEffect(() => {
    async function getList() {
      const data = await fetch(URL).then(res=>res.json())
      setList(data.data)
    }
    getList()
  }, [])
  return (
    <div className="App">
      <ul>
        {list.map(item => (<li key={item.id}>{item.name}</li>))}
      </ul>
    </div>
  );
}

語法:

useEffect(() => { }, [])

參數(shù)1是一個函數(shù),可以把它叫做副作用函數(shù),在函數(shù)內(nèi)部可以放置要執(zhí)行的操作
參數(shù)2是一個數(shù)組(可選),在數(shù)組里放置依賴項,不同依賴項會影響第一個參數(shù)函數(shù)的執(zhí)行,當時一個空數(shù)組的時候,副作用函數(shù)只會在組件渲染完畢之后執(zhí)行一次。


image.png

清除副作用

在useEffect中編寫的由渲染本身引起的對接組件外部的操作,社區(qū)也經(jīng)常把它叫做副作用操作,比如在useEffect中開啟了一個定時器,我們想在組件卸載時把這個定時器清理掉,這個過程就是清除副作用。語法:

useEffect(() => {
    // 實現(xiàn)副作用
    return () => {
      // 清除副作用
      // 清除副作用的函數(shù)最常見的執(zhí)行時機是在組件卸載時自動執(zhí)行
    }
  }, [])
function Son() {
  useEffect(() => {
    const timer= setInterval(()=>{
      console.log('定時器')
    },1000)
    return () =>{
      clearInterval(timer)
    }
  },[])
  return <h2>這是一個child,Son組件</h2>
}

function App() {
  // 通過條件渲染模擬組件卸載
  const [show, setShow] = useState(true)
  return (
    <div className="App">
      {show && <Son></Son>}
      <button onClick={() => setShow(false)}>卸載Son組件</button>
    </div>
  );
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容