網站首頁 編程語言 正文
摘要
首先我們知道,在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-05-13 Headless Chrom自動化工具詳解
- 2023-05-14 windows下vscode環境c++利用matplotlibcpp繪圖_C 語言
- 2022-11-27 深入了解Linux的文件權限_linux shell
- 2022-08-28 SpringBoot 實現自定義的 starter
- 2022-06-09 ASP.NET?Core使用EF創建關系模型_實用技巧
- 2021-12-06 Atlassian系列產品及插件激活方法[JIRA8.19.0+]_其它綜合
- 2022-02-23 圖片返回base64數據渲染為圖片的處理
- 2023-10-09 element-ui,tree樹形控件,通過接口返回數據判斷是否繼續拿子節點
- 最近更新
-
- 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同步修改后的遠程分支