網(wǎng)站首頁 編程語言 正文
一、React的事件處理
1、與DOM事件處理的不同之處
(1)React事件的命名方式:小駝峰方式,DOM的命名方式是小寫
例如:DOM的命名:onclick
React的命名:onClick
(2)事件處理函數(shù)是以對象的方式賦值,而不是以字符串的方式賦值
例如:DOM以字符串方式:onclick = "handleClick()"
React以對象方式:onClick = { handleClick }
(3)阻止默認事件的方式不同
DOM通過返回false來阻止: 百度
React需要顯式調(diào)用e.preventDefault來阻止
2、React中事件處理函數(shù)的定義
(1)使用ES6的箭頭數(shù)
①在render函數(shù)中使用箭頭函數(shù):
Ⅰ、優(yōu)點:不用在構(gòu)造函數(shù)中綁定this
Ⅱ、缺點:當函數(shù)的邏輯比較復(fù)雜時,render就顯得臃腫,無法直觀的看到組件的UI結(jié)構(gòu),代碼可讀性差
事件處理函數(shù)-->在render中使用箭頭函數(shù)
②使用class fields語法:將箭頭函數(shù)賦給類的屬性
Ⅰ、優(yōu)點:不用在構(gòu)造函數(shù)中綁定this,在render函數(shù)中調(diào)用簡單
(2)在構(gòu)造函數(shù)中進行綁定:將事件處理函數(shù)作為類的成員函數(shù)
注意:在定義事件處理函數(shù)時,是無法識別this(即this是undefined的),必須在構(gòu)造函數(shù)中綁定this
①、優(yōu)點:在render函數(shù)調(diào)用時不需要重新創(chuàng)建事件處理函數(shù)
②、缺點:當事件處理很多時,構(gòu)造函數(shù)就顯的很繁瑣
(3)在render函數(shù)中綁定this
①、優(yōu)點:在調(diào)用事件處理函數(shù)時,傳參比較方便
②、缺點:每次調(diào)用render函數(shù)時都重新綁定,導(dǎo)致性能下降
(4)React中事件處理函數(shù)
幾種方式的比較
影響constructor函數(shù)中bind使用class fields語法render中使用箭頭函數(shù)render中使用bindrender時生成新函數(shù)否否是是性能無影響無影響有影響有影響可直接攜帶參數(shù)否否是是簡潔性不好好好好
(5)注意事項
①React事件的命名采用小駝峰式(camelCase),而不是純小寫。且事件名稱之后不能加(),否則會直接執(zhí)行
②不能通過返回false的方式阻止默認行為,必須顯示的使用preventDefault
③必須謹慎對待JXS回調(diào)函數(shù)中的this,在JavaScript中,class(類)的方法默認不會綁定this。如果忘記綁定this.textChange并把它傳入onChange,當調(diào)用這個函數(shù)的時候,this的值為undefined。如果覺得使用bind麻煩,還可以使用箭頭函數(shù)。
3、事件處理中的參數(shù)傳遞
(1)直接傳遞參數(shù)
①在構(gòu)造函數(shù)中給事件處理函數(shù)綁定this,調(diào)用事件處理函數(shù)時直接傳參
注意:在箭頭函數(shù)中調(diào)用事件處理函數(shù)時不需要綁定this
②在render函數(shù)中調(diào)用事件處理函數(shù)時進行this的綁定
(2)在定義UI控件時使用data自定義屬性,在事件處理函數(shù)中通過'e.target.dataset.屬性名'來獲取UI控件中的data屬性值
事件處理中的參數(shù)傳遞
4、事件流
(1)React的事件流默認是冒泡
事件流 //輸出child,parent,ancestor
(2)React中使用捕獲方式:事件類型后面加一個后綴Capture
先由document找到最外層綠色的,然后傳給藍色,然后傳給紅色。所以工具中輸出的順序是(ancestor,parent,child)
5、事件對象
雖然React事件是合成事件,但是在事件處理中可以獲取事件對象的
(1)在React事件處理中有一個全局事件對象
event對象,每次事件觸發(fā)后(事件處理函數(shù)調(diào)用完成后),就會清空event對象當下一次事件觸發(fā)時重新獲取該對象。該對象不是原生(DOM)的event對象,但是可以通過該對象獲取原生對象的部分屬性
(2)在異步操作中獲取event
?問題:當事件觸發(fā)、響應(yīng)結(jié)束后,event對象會被清空,但是異步數(shù)據(jù)還沒有得到,在得到異步數(shù)據(jù)之后再去訪問?event對象的屬性就會報錯。
解決辦法:先將event對象的某些屬性值保存起來,得到異步數(shù)據(jù)之后再來使用這些屬性值
總結(jié)
原文鏈接:https://blog.csdn.net/Han_Zhou_Z/article/details/123338807
相關(guān)推薦
- 2022-10-04 正則表達式中關(guān)于對原生字符串的簡單理解_正則表達式
- 2023-01-07 python導(dǎo)入其他目錄下模塊的四種情況_python
- 2022-07-12 Linux虛擬機設(shè)置雙網(wǎng)卡
- 2022-12-23 Kotlin?try?catch異常處理i詳解_Android
- 2022-12-28 jQuery如何設(shè)置背景顏色_jquery
- 2022-11-02 Pytest運行及其控制臺輸出信息_python
- 2022-07-16 Spring MVC重定向和轉(zhuǎn)發(fā)
- 2022-03-27 C++如何用數(shù)組模擬鏈表_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支