React中的useEffect useLayoutEffect到底怎么用
前言
使用緣由:
在函數(shù)中當請求數(shù)據(jù)時并且給state賦值會導致整個函數(shù)刷新,
從而導致死循環(huán)的進行數(shù)據(jù)請求, 所以這時候可以用到useEffect
介紹
- useEffect(處理副作用)
- useLayoutEffect(同步執(zhí)行副作用)
使用
空依賴
import axios from 'axios'; import React,{useEffect, useState} from 'react'; function Test2() { const [list,setlist] =useState([]) useEffect(()=>{ axios.get("./test.json").then(res=>{ console.log(res.data) setlist(res.data) }) },[])//參數(shù)1是函數(shù),參數(shù)2是數(shù)組 return ( <div> { list.map(item=> <li key={item.id}>{item.name}</li> ) } </div> ); } export default Test2;
傳空數(shù)組表示無依賴,只執(zhí)行一次
非空依賴
數(shù)組傳依賴,當該依賴更新后也會進行執(zhí)行(可以想象成class類的更新)
下方案例代表第一次執(zhí)行,name被更新后也會進行執(zhí)行
/** * 傳非空數(shù)組 */ import axios from 'axios'; import React,{useEffect, useState} from 'react'; function Test3() { const [name,setname] =useState("peng-ke") useEffect(()=>{ setname(name.substring(0,1).toUpperCase()+name.substring(1)) },[name])//參數(shù)1是函數(shù),參數(shù)2是數(shù)組 return ( <div> {name} <button onClick={()=>{setname("study")}}>修改</button> </div> ); } export default Test3;
實現(xiàn)銷毀操作
通過return函數(shù)執(zhí)行銷毀后的行為
/** * 模擬銷毀 */ import React,{Component, useEffect, useState} from 'react'; function Children() { const [name,setname] =useState("peng-ke") useEffect(()=>{ window.onresize=()=>{ console.log("resize") } let timer=setInterval(() => { console.log("ppppp") }, 1000); return ()=>{ console.log("銷毀"); window.onresize=null; clearInterval(timer) } },[]) return ( <div> 碰磕 </div> ); } class Test4 extends Component{ state={ iscreated:true } render(){ return( <div> <button onClick={()=>{ this.setState({ iscreated:!this.state.iscreated }) }}>點我</button> {this.state.iscreated && <Children />} </div> ) } } export default Test4;
兩者區(qū)別
- 調(diào)用時機不同,useLayoutEffect和原來的componentDidMount&componentDidUpdate一致,在react完成DOM更新后馬上同步調(diào)用,這樣會阻塞頁面渲染,而useEffect是會在整個頁面渲染完成才會調(diào)用所以推薦使用useEffect
- 如果操作DOM的代碼推薦放在useLayoutEffect中
到此這篇關于React中的useEffect useLayoutEffect到底怎么用的文章就介紹到這了,更多相關React useEffect useLayoutEffect內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
nodejs和react實現(xiàn)即時通訊簡易聊天室功能
這篇文章主要介紹了nodejs和react實現(xiàn)即時通訊簡易聊天室功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08react?hooks?UI與業(yè)務邏輯分離必要性技術方案
這篇文章主要為大家介紹了react?hooks?UI與業(yè)務邏輯分離必要性技術方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11React?SSR架構Stream?Rendering與Suspense?for?Data?Fetching
這篇文章主要為大家介紹了React?SSR架構Stream?Rendering與Suspense?for?Data?Fetching解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03