最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React-hooks中的useEffect使用步驟

 更新時(shí)間:2022年05月06日 17:19:28   作者:前端卡卡西呀  
這篇文章主要介紹了React-hooks中的useEffect,對(duì)于React組件來(lái)說(shuō),主作用是根據(jù)數(shù)據(jù)(state/props)渲染UI,除此之外都是副作用(比如手動(dòng)修改DOM、發(fā)送ajax請(qǐng)求),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

useEffect 永遠(yuǎn)是在 DOM渲染完成之后執(zhí)行

1.理解函數(shù)副作用

什么是副作用?

對(duì)于React組件來(lái)說(shuō),主作用是根據(jù)數(shù)據(jù)(state/props)渲染UI,除此之外都是副作用(比如手動(dòng)修改DOM、發(fā)送ajax請(qǐng)求)。

常見(jiàn)的副作用

  • 數(shù)據(jù)請(qǐng)求(發(fā)送ajax)
  • 手動(dòng)修改 DOM
  • localstorage操作

useEffect 函數(shù)的作用就是為react函數(shù)組件提供副作用

2.基礎(chǔ)使用

使用步驟

  • 導(dǎo)入 useEffect 函數(shù)
  • 調(diào)用 useEffect 函數(shù),并傳入回調(diào)函數(shù)
  • 在回調(diào)函數(shù)中編寫(xiě)副作用處理
  • 修改數(shù)據(jù)狀態(tài)
  • 檢測(cè)副作用是否生效

示例代碼

import {useState, useEffect} from 'react';
function App() {
	const [count, setCount] = useState(0);
	useEffect(() => {
		console.log("觸發(fā)副作用");
		document.title = `點(diǎn)擊了${count}次`;
	});
	return (
		<div>
			<button onClick={() => setCount(count + 1)}>點(diǎn)擊{count}次</button>
		</div>
	)
}

3.依賴項(xiàng)控制

副作用執(zhí)行時(shí)機(jī)

1.默認(rèn)狀態(tài)(無(wú)依賴項(xiàng))

上邊的示例中,組件初始化時(shí)先觸發(fā)一次(console出內(nèi)容),之后每次點(diǎn)擊按鈕,都會(huì)觸發(fā) 副作用。
useEffect 可執(zhí)行多次。

2.依賴項(xiàng) 為空

useEffect 函數(shù)還可以接收第二個(gè)參數(shù),作為該副作用的依賴項(xiàng),當(dāng)?shù)诙€(gè)參數(shù) 傳入一個(gè)空數(shù)組[] 時(shí),表明只有 組件初始化的時(shí)候執(zhí)行一次
咱們對(duì)上邊的案例做下 微調(diào)

function App() {
	const [count, setCount] = useState(0);
	useEffect(() => {
		console.log("觸發(fā)副作用");
		document.title = `點(diǎn)擊了${count}次`;
	}, []); // 注意這里,傳入 []
	return (
		<div>
			<button onClick={() => setCount(count + 1)}>點(diǎn)擊{count}次</button>
		</div>
	)
}

可以看到當(dāng)點(diǎn)擊按鈕時(shí),title 不再改變。

3.依賴特定項(xiàng)

當(dāng)依賴項(xiàng)數(shù)組中傳入值時(shí),那么該副作用會(huì)在 組件初始化的時(shí)候執(zhí)行一次,依賴的特定項(xiàng)變化時(shí)會(huì)再次執(zhí)行

function App() {
  const [count, setCount] = useState(0);
  const [name, setName] = useState('李白');
  useEffect(() => {
    console.log('觸發(fā)渲染')
    document.title = `clicked ${count} times`;
    console.log('name: ', {name});
  },[count]) // 這里我們傳入 count,不傳name
  return (
    <>
      <p>當(dāng)前次數(shù):{count}</p>
      <p><button onClick={() => setCount(count + 1)}>累計(jì)</button></p>
      <p><button onClick={() => setName("杜甫")}>改名{name}</button></p>
    </>
  )
}

如上,當(dāng)我們點(diǎn)擊 “累計(jì)” 按鈕時(shí),會(huì)console內(nèi)容,title也會(huì)改變,但是我們點(diǎn)擊 “改名”時(shí),不會(huì)發(fā)生變化,就是因?yàn)槲覀冊(cè)谝蕾図?xiàng)數(shù)組中傳入了 “count” 而沒(méi)有 “name”。

4.注意事項(xiàng)

只要在 useEffect 回調(diào)函數(shù)中用到的數(shù)據(jù)狀態(tài)就應(yīng)該出現(xiàn)在依賴項(xiàng)數(shù)組中聲明,否則可能會(huì)有bug。

5.清除副作用

在組件被銷(xiāo)毀時(shí),如果有些副作用操作需要被清理,比如常見(jiàn)的定時(shí)器等,可通過(guò)useEffect return回調(diào)函數(shù) 的方式清理副作用。

語(yǔ)法如下:

useEffect(() => {
	console.log('副作用函數(shù)執(zhí)行');
	return () => {
		console.log('清理副作用的函數(shù)執(zhí)行');
		// 這里執(zhí)行 清理副作用的代碼
	}
})

示例:

function Test() {
  useEffect(() => {
    let timer = setInterval(() => {
      console.log('this is effect');
    }, 1000)
    // 這里return 一個(gè)回調(diào)函數(shù),在函數(shù)中清除副作用
    return () => {
      clearInterval(timer);
    }
  })
  return (
    <div>Test</div>
  )
}
function App() {
  const [flag, setFlag] = useState(true);
  return (
    <div>
      {flag ? <Test/> : null}
      <div>
        <button onClick={() => setFlag(!flag)}>點(diǎn)擊</button>
      </div>
    </div>
  )
}

6.發(fā)送網(wǎng)絡(luò)請(qǐng)求

不可以直接在 useEffect 的回調(diào)函數(shù)外層直接包裹await,因?yàn)?strong>異步會(huì)導(dǎo)致清理函數(shù)無(wú)法立即返回
?錯(cuò)誤示例:

useEffect(async () => {
	const res = await getData('url');
	console.log(res);
})

可在 useEffect 中定義一個(gè)請(qǐng)求數(shù)據(jù)方法,調(diào)用。

正確示例

useEffect(() => {
	async function initData() {
		const res = await getData('url');
		console.log(res);
	}
	initData()
}, []) // 僅組件初始化時(shí)調(diào)用

到此這篇關(guān)于React-hooks中的useEffect的文章就介紹到這了,更多相關(guān)React-hooks useEffect內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React forwardRef的使用方法及注意點(diǎn)

    React forwardRef的使用方法及注意點(diǎn)

    React.forwardRef的API中ref必須指向dom元素而不是React組件,通過(guò)一段示例代碼給大家介紹了React forwardRef使用方法及注意點(diǎn)還有一些特殊情況分析,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • react-router?v6實(shí)現(xiàn)權(quán)限管理+自動(dòng)替換頁(yè)面標(biāo)題的案例

    react-router?v6實(shí)現(xiàn)權(quán)限管理+自動(dòng)替換頁(yè)面標(biāo)題的案例

    這篇文章主要介紹了react-router?v6實(shí)現(xiàn)權(quán)限管理+自動(dòng)替換頁(yè)面標(biāo)題,這次項(xiàng)目是有三種權(quán)限,分別是用戶,商家以及管理員,這次寫(xiě)的權(quán)限管理是高級(jí)權(quán)限能訪問(wèn)低級(jí)權(quán)限的所有頁(yè)面,但是低級(jí)權(quán)限不能訪問(wèn)高級(jí)權(quán)限的頁(yè)面,需要的朋友可以參考下
    2023-05-05
  • 深入了解React中的合成事件

    深入了解React中的合成事件

    React 中的事件,是對(duì)原生事件的封裝,叫做合成事件。這篇文章主要通過(guò)幾個(gè)簡(jiǎn)單的示例為大家詳細(xì)介紹一下React中的合成事件,感興趣的可以了解一下
    2023-02-02
  • React如何使用sortablejs實(shí)現(xiàn)拖拽排序

    React如何使用sortablejs實(shí)現(xiàn)拖拽排序

    這篇文章主要介紹了React如何使用sortablejs實(shí)現(xiàn)拖拽排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • React進(jìn)行路由變化監(jiān)聽(tīng)的解決方案

    React進(jìn)行路由變化監(jiān)聽(tīng)的解決方案

    在現(xiàn)代單頁(yè)應(yīng)用(SPA)中,路由管理是至關(guān)重要的一部分,它不僅決定了用戶如何在頁(yè)面間切換,還直接影響到整個(gè)應(yīng)用的性能和用戶體驗(yàn),這些看似不起眼的問(wèn)題,往往會(huì)導(dǎo)致功能錯(cuò)亂和性能下降,本篇文章將深入探討在 React 中如何高效監(jiān)聽(tīng)路由變化,需要的朋友可以參考下
    2025-01-01
  • react中使用redux-persist做持久化儲(chǔ)存的過(guò)程記錄

    react中使用redux-persist做持久化儲(chǔ)存的過(guò)程記錄

    這篇文章主要介紹了react中使用redux-persist做持久化儲(chǔ)存的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • ReactRouterV6如何獲取當(dāng)前路由參數(shù)

    ReactRouterV6如何獲取當(dāng)前路由參數(shù)

    這篇文章主要介紹了ReactRouterV6如何獲取當(dāng)前路由參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 解決React報(bào)錯(cuò)You provided a `checked` prop to a form field

    解決React報(bào)錯(cuò)You provided a `checked` prop&n

    這篇文章主要為大家介紹了React報(bào)錯(cuò)You provided a `checked` prop to a form field的解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解React setState數(shù)據(jù)更新機(jī)制

    詳解React setState數(shù)據(jù)更新機(jī)制

    這篇文章主要介紹了React setState數(shù)據(jù)更新機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • React中使用async validator進(jìn)行表單驗(yàn)證的實(shí)例代碼

    React中使用async validator進(jìn)行表單驗(yàn)證的實(shí)例代碼

    react上進(jìn)行表單驗(yàn)證是很繁瑣的,在這里使用async-validator處理起來(lái)就變的很方便了,接下來(lái)通過(guò)本文給大家介紹React中使用async validator進(jìn)行表單驗(yàn)證的方法,需要的朋友可以參考下
    2018-08-08

最新評(píng)論

蚌埠市| 米易县| 壤塘县| 且末县| 夏邑县| 平原县| 永州市| 赣州市| 兰溪市| 武乡县| 绥棱县| 额济纳旗| 黑龙江省| 论坛| 凤翔县| 阳朔县| 潜山县| 泊头市| 蒲城县| 烟台市| 库车县| 确山县| 额尔古纳市| 杭锦旗| 潼关县| 海宁市| 台江县| 宁化县| 宁武县| 南阳市| 天峻县| 分宜县| 晴隆县| 漾濞| 大余县| 思茅市| 辽阳市| 桂东县| 水富县| 龙胜| 寻乌县|