2 Effect Hook
生活随笔
收集整理的這篇文章主要介紹了
2 Effect Hook
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
副作用:和外部有交互
純函數:相同的輸入一定會得到相同的輸出
Effect Hook可以讓你在函數組件中執行副作用操作
類組件中處理副作用
- 在componentDidMount/componentDidUpdate聲明周期中(真實dom構建以前)
useEffect執行時機
- 初次渲染之后 didMount(真實dom構建以后)
- 渲染更新時 didUpdate
- 是異步的,在回調函數中拿到更新的state
存在清理函數
組件更新
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(() => {// 持續遞增console.log('useEffect')let timer = setInterval(() => { // 2. 每一次副作用都會重新初始化一個timersetCount(count + 1)}, 1000)return () => {clearInterval(timer) // 1.閉包 第二次運行時,先清理上一次的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') // 組件更新、銷毀時執行}})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時執行
依賴項
- 指定當前effect函數所需要的依賴項
- 若依賴項是[],在初次渲染和卸載的時候執行
- 若依賴項不變,effect不執行
- 存在依賴項 && 依賴項更新時,effect執行
競態問題
- 接口返回的時長不同,后返回的覆蓋了之前的數據,導致沒有渲染正確的結果
現象:結果3覆蓋了4
總結
以上是生活随笔為你收集整理的2 Effect Hook的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux awr 日志,Linux平台
- 下一篇: 3 useReducer及其实现