網站首頁 編程語言 正文
一、React的事件處理
1、與DOM事件處理的不同之處
(1)React事件的命名方式:小駝峰方式,DOM的命名方式是小寫
例如:DOM的命名:onclick
React的命名:onClick
(2)事件處理函數是以對象的方式賦值,而不是以字符串的方式賦值
例如:DOM以字符串方式:onclick = "handleClick()"
React以對象方式:onClick = { handleClick }
(3)阻止默認事件的方式不同
DOM通過返回false來阻止: 百度
React需要顯式調用e.preventDefault來阻止
2、React中事件處理函數的定義
(1)使用ES6的箭頭數
①在render函數中使用箭頭函數:
Ⅰ、優點:不用在構造函數中綁定this
Ⅱ、缺點:當函數的邏輯比較復雜時,render就顯得臃腫,無法直觀的看到組件的UI結構,代碼可讀性差
事件處理函數-->在render中使用箭頭函數
②使用class fields語法:將箭頭函數賦給類的屬性
Ⅰ、優點:不用在構造函數中綁定this,在render函數中調用簡單
(2)在構造函數中進行綁定:將事件處理函數作為類的成員函數
注意:在定義事件處理函數時,是無法識別this(即this是undefined的),必須在構造函數中綁定this
①、優點:在render函數調用時不需要重新創建事件處理函數
②、缺點:當事件處理很多時,構造函數就顯的很繁瑣
(3)在render函數中綁定this
①、優點:在調用事件處理函數時,傳參比較方便
②、缺點:每次調用render函數時都重新綁定,導致性能下降
(4)React中事件處理函數
幾種方式的比較
影響constructor函數中bind使用class fields語法render中使用箭頭函數render中使用bindrender時生成新函數否否是是性能無影響無影響有影響有影響可直接攜帶參數否否是是簡潔性不好好好好
(5)注意事項
①React事件的命名采用小駝峰式(camelCase),而不是純小寫。且事件名稱之后不能加(),否則會直接執行
②不能通過返回false的方式阻止默認行為,必須顯示的使用preventDefault
③必須謹慎對待JXS回調函數中的this,在JavaScript中,class(類)的方法默認不會綁定this。如果忘記綁定this.textChange并把它傳入onChange,當調用這個函數的時候,this的值為undefined。如果覺得使用bind麻煩,還可以使用箭頭函數。
3、事件處理中的參數傳遞
(1)直接傳遞參數
①在構造函數中給事件處理函數綁定this,調用事件處理函數時直接傳參
注意:在箭頭函數中調用事件處理函數時不需要綁定this
②在render函數中調用事件處理函數時進行this的綁定
(2)在定義UI控件時使用data自定義屬性,在事件處理函數中通過'e.target.dataset.屬性名'來獲取UI控件中的data屬性值
事件處理中的參數傳遞
4、事件流
(1)React的事件流默認是冒泡
事件流 //輸出child,parent,ancestor
(2)React中使用捕獲方式:事件類型后面加一個后綴Capture
先由document找到最外層綠色的,然后傳給藍色,然后傳給紅色。所以工具中輸出的順序是(ancestor,parent,child)
5、事件對象
雖然React事件是合成事件,但是在事件處理中可以獲取事件對象的
(1)在React事件處理中有一個全局事件對象
event對象,每次事件觸發后(事件處理函數調用完成后),就會清空event對象當下一次事件觸發時重新獲取該對象。該對象不是原生(DOM)的event對象,但是可以通過該對象獲取原生對象的部分屬性
(2)在異步操作中獲取event
?問題:當事件觸發、響應結束后,event對象會被清空,但是異步數據還沒有得到,在得到異步數據之后再去訪問?event對象的屬性就會報錯。
解決辦法:先將event對象的某些屬性值保存起來,得到異步數據之后再來使用這些屬性值
總結
原文鏈接:https://blog.csdn.net/Han_Zhou_Z/article/details/123338807
相關推薦
- 2022-04-25 C#使用NPOI導出Excel類封裝_C#教程
- 2022-10-20 C#?Winform消息通知系統托盤氣泡提示框ToolTip控件_C#教程
- 2022-06-18 C語言?圖文并茂詳解程序編譯過程_C 語言
- 2022-06-01 C語言的動態內存管理你了解嗎_C 語言
- 2023-04-07 關于C#中的Invoke示例詳解_C#教程
- 2022-07-22 Python ModuleNotFoundError: No module named通俗的解釋和方
- 2022-04-18 Android申請相機權限和讀寫權限實例_python
- 2022-04-07 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同步修改后的遠程分支