網站首頁 編程語言 正文
摘要
首先我們知道,在React中,是通過小駝峰式給元素綁定事件:
fn = ()=>{
//執行代碼
}
button onClick={this.fn}>111</button>
但是如果有Vue的基礎,可以很清楚的看到二者的區別。在Vue中,我們可以直接給fn傳遞參數。
但是如果在React中我們這么做:
fn = (value)=>{
//執行代碼
console.log(value)
}
button onClick={this.fn('2222')}>111</button>
你會發現,在頁面加載的時候,2222已經被打印出來了。但是點擊按鈕的時候并沒有效果。
這說明,該方法并沒有被綁定在按鈕上,而是在按鈕加載的時候直接調用了。
而這一點也很好理解,React并沒有做向Vue這方面的處理,它是直接調用完,將返回值綁定給了onClick。所以這里我們要記住,事件綁定的時候,一定要綁定的是一個函數。
OK,現在了解了問題所在,如果我想在調用方法的時候傳遞參數,應該怎么做呢?
1.箭頭函數
第一個方法,如果我們在給按鈕綁定事件的時候,外層綁定的是一個箭頭函數,里面才是我們寫的方法,似乎就能完美的解決問題了:
speak = (value) =>{
alert(value)
}
<button onClick={() => {this.speak('qnmlgbd')}}>說話</button>
通過箭頭函數的方式,直接給onClick綁定的就是我們定義的speak方法,并且傳遞好了參數。
2.函數柯里化
那如果箭頭函數可以,似乎我們直接在方法里面返回一個方法,也沒有什么問題。
say = (value)=>{
return ()=>{
alert(value)
}
}
<button onClick={this.say('qnmlgbd')}>說話</button>
通過這種方式,我們在onClick綁定的時候,可以不用寫箭頭函數了,比較好看一點。但是原理和剛剛那種方式是一個樣子的。
3.bind方法
我們知道,bind方法是改變方法的this指向,并且返回的是一個方法。不會直接調用。
OK,如果bind有這個特性,我們就可以利用它解決這個問題。
loud(value){
alert(value)
}
<button onClick={this.loud.bind(this,'qnmlgbd')}>說話</button>
這里可以注意一下,loud方法在定義的時候沒有采用箭頭函數的方式。而之前的兩個方法在定義的時候都使用了箭頭函數的方式。
這是因為,在React中,如果定義函數不使用箭頭函數,函數里面的this會是綁定事件的元素,而不是React組件。但是如果用bind方法進行事件綁定,就不需要考慮這個問題了。
最后我們總的看一下這三種方式的差別:
export default class Child extends Component {
say = (value)=>{
return ()=>{
alert(value)
}
}
speak = (value) =>{
alert(value)
}
loud(value){
alert(value)
}
render() {
return (
<div>
<button onClick={this.say('qnmlgbd')}>說話</button>
<button onClick={() => {this.speak('qnmlgbd')}}>說話</button>
<button onClick={this.loud.bind(this,'qnmlgbd')}>說話</button>
</div>
)
}
}
原文鏈接:https://blog.csdn.net/weixin_46726346/article/details/126785941
相關推薦
- 2022-09-13 c++如何實現歸并兩個有序鏈表_C 語言
- 2022-03-27 Android顯示富文本+夜間深色模式_Android
- 2022-04-18 C++中的命名空間詳細介紹_C 語言
- 2022-06-17 Ruby操作CSV格式數據方法詳解_ruby專題
- 2022-07-24 Python實現FIFO緩存置換算法_python
- 2023-01-14 ubuntu端向日葵鍵盤輸入卡頓問題及解決_Linux
- 2022-10-15 Redisson?加鎖解鎖的實現_Redis
- 2022-04-02 C語言實現簡單的五子棋游戲_C 語言
- 最近更新
-
- 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同步修改后的遠程分支