網站首頁 編程語言 正文
useEffect
useEffect():由于函數數組件中不能使用生命周期 ,所以用useEffect()在函數組件中來模擬生命周期鉤子,
基本語法
// 語法和說明:
useEffect(() =>{
//在此可以執行任何帶副作用操作(發ajax請求數據獲取,設置訂閱、啟動定時器,手動修改真實DOM)
return () => {
//組件卸載前執行
//在此做一些收尾工作,比如清除定時器/取消訂閱等
}
},[stateValue]) //如果指定的是[],回調函數只會在第一次render()后執行
一.如果useEffect沒有依賴項
(1)則第一次渲染完畢后,執行callback,等價于類組件中的生命周期 componentDidMount(一般在這個鉤子中做一些初始化的事情)
(2)在組件每一次更新完畢后,也會執行callback,等價于 componentDidUpdate(更新階段)
const StateDom= function StateDom() {
let [num, setNum] = useState(0),
useEffect(() => {
// 獲取最新的狀態值
console.log('你好周杰倫', num); // 組件第一次渲染和組件更新在控制臺打印
});
const handle = () => {
setNum(num + 1);
};
return <div className="demo">
<span className="num">{num}</span>
<Button type="primary"
size="small"
onClick={handle}>
新增
</Button>
</div>;
};
export default StateDom;
二.如果useEffects設置了依賴,但是沒有依賴項
(1)只有第一次渲染完畢后,才會執行callback,每一次視圖更新完畢后,callback不再執行)類似于 componentDidMount
const StateDom= function StateDom() {
let [num, setNum] = useState(0),
useEffect(() => {
console.log('你好周杰倫', num); // 第一次渲染完在控制臺打印
}, []);
const handle = () => {
setNum(num + 1);
};
return <div className="demo">
<span className="num">{num}</span>
<Button type="primary"
size="small"
onClick={handle}>
新增
</Button>
</div>;
};
export default StateDom;
三,如果useEffects設置了依賴項useEffect(callback,[依賴的狀態(多個狀態)])
(1)第一次渲染完畢會執行callback
(2)當依賴的狀態值(或者多個依賴狀態中的一個)發生改變,也會觸發callback執行
(3)但是依賴的狀態如果沒有變化,在組件更新的時候,callback是不會執行的
const StateDom= function StateDom() {
let [num, setNum] = useState(0),
useEffect(() => {
console.log('你好周杰倫', num);
}, [num]);
const handle = () => {
setNum(num + 1);
};
return <div className="demo">
<span className="num">{num}</span>
<Button type="primary"
size="small"
onClick={handle}>
新增
</Button>
</div>;
};
export default StateDom;
四, 返回的小函數,會在組件釋放的時候執行
useEffect(()=>{
return ()=>{
// 返回的小函數,會在組件釋放的時候執行
// 如果組件更新,會把上一次返回的小函數執行「可以“理解為”上一次渲染的組件釋放了」
};
});
const StateDom= function StateDom() {
let [num, setNum] = useState(0),
useEffect(() => {
return () => {
// 獲取的是上一次的狀態值
console.log('你好,鄧紫棋', num);
};
});
const handle = () => {
setNum(num + 1);
};
return <div className="demo">
<span className="num">{num}</span>
<Button type="primary"
size="small"
onClick={handle}>
新增
</Button>
</div>;
};
export default StateDom;
原文鏈接:https://blog.csdn.net/weixin_50379372/article/details/131314430
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2023-03-11 Go語言中init函數與匿名函數使用淺析_Golang
- 2022-03-18 C++類和對象之封裝詳解_C 語言
- 2023-07-13 el-table實現多選及反選
- 2021-11-26 linux服務器磁盤空間擴充方法_Linux
- 2022-09-06 Python的functools模塊使用及說明_python
- 2024-01-12 nvarchar和varchar的區別
- 2023-05-16 golang-gorm自動建表問題_Golang
- 2022-06-01 python中使用正則表達式的方法詳解_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支