react Hocks中的useEffect勾子極大簡化了代碼挪鹏,但是又有些副作用月而,這些副作用用好了提高效率菜谣,用不好加班禿頭!
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState({});
useEffect(() => {
setCount({test:"count是一個(gè)對(duì)象浪南,使得頁面死循環(huán)"})
},[count]);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
結(jié)果:頁面死循環(huán)
解釋:
useEffect接受兩個(gè)參數(shù):
- 第一個(gè)參數(shù)是函數(shù)(這里叫effect函數(shù))笼才,它的作用是,在頁面渲染后執(zhí)行這個(gè)函數(shù)络凿。因此你可以把a(bǔ)jax請(qǐng)求等放在這里執(zhí)行骡送;
- 第二個(gè)參數(shù)是一個(gè)數(shù)組,這里注意:
參數(shù)情況 | 效果 | 注意 |
---|---|---|
不傳 | 每次渲染后都執(zhí)行清理或者執(zhí)行effect | 這可能會(huì)導(dǎo)致性能問題絮记,比如兩次渲染的數(shù)據(jù)完全一樣 |
傳空數(shù)組 | 只運(yùn)行一次的 effect(僅在組件掛載和卸載時(shí)執(zhí)行) | 這就告訴 React 你的 effect 不依賴于 props 或 state 中的任何值摔踱,所以它永遠(yuǎn)都不需要重復(fù)執(zhí)行 |
傳[count] | React 將對(duì)前一次渲染的count和后一次渲染的count進(jìn)行比較。若相等React 會(huì)跳過這個(gè) effect到千, | 實(shí)現(xiàn)了性能的優(yōu)化 |
上面例子中之所以造成頁面的死循環(huán)昌渤,是因?yàn)樵贘avaScript中,{} === {}
結(jié)果是false憔四,{a:1} === {a:1}
同樣膀息,由此造成了react以為兩個(gè)值不同,就一直的渲染最終頁面死循環(huán)了赵。
結(jié)論:第二個(gè)參數(shù)一般情況下不要使用引用類型潜支!
THE END!