中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react點擊事件的寫法有哪些

發布時間:2022-04-22 10:33:13 來源:億速云 閱讀:172 作者:zzz 欄目:web開發

這篇文章主要講解了“react點擊事件的寫法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“react點擊事件的寫法有哪些”吧!

寫法:1、用“onClick={this.handleClick}”;2、用“onClick={this.handleClick.bind(this)}”;3、用“{(params)=>this.handleClick(params)}”。

本教程操作環境:Windows10系統、react17.0.1版、Dell G3電腦。

react點擊事件的幾種寫法是什么

開門見山,先直接給出為一個button添加一個事件的正確寫法:

為一個button添加一個onclick事件的正確寫法

  • 不傳參數

// handleClick用 <箭頭函數> 定義
onClick = { this.handleClick }

// handleClick用箭頭函數定義時,為onClick添加事件應該這么寫:<Button onClick = { this.handleClick }></Button>

handleClick這么定義:

handleClick = () => { // do something here};

// handleClick用 (普通函數) 定義
onClick = { this.handleClick.bind(this) }

// handleClick用普通函數定義時,為onClick添加事件應該這么寫:<Button onClick = { this.handleClick.bind(this) }></Button>

handleClick這么定義:

handleClick () { // do something here }
  • 傳參數

// handleClick用 <箭頭函數>/(普通函數) 定義都可以
onClick = { (params) => this.handleClick(params) }

 // handleClick可以是箭頭函數,也可以是普通函數<Button onClick = { (params) => this.handleClick(params) }></Button>

接下來分析一下為什么這樣寫是正確的:

this的指向分析

理解這個問題,帶著下面這幾句話去理解:

箭頭函數,沒有自己的this,所以它的this是 : 定義時上下文 的this
普通函數,有自己的this,所以它的this是:執行時上下文的this

先來看第一種寫法:

1. onClick = { this.handleClick } + 箭頭函數

下面給出的代碼為:為一個按鈕添加onclick事件(一個完整的jsx)

// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component {
    // 2. 定義handleClick事件
    handleClick = () => {
        console.log(this); //3. this指向examplePage
    }

    render() {
        return (
            <p>
            // 1. 為onClick綁定 handleClick事件處理函數
                <Button onClick = { this.handleClick }>click me</Button>
            </p>
        )
    }}export default examplePage;

點擊按鈕,打印出指向examplePage的this:

this: examplePage {props: Object, context: {}, refs: {}, updater: Object, state: {}, …}

分析:

  • 當點擊Button,調用handleClick事件處理函數,

  • 因為handleClick是一個箭頭函數,因此 this是 定義時上下文的this ,

  • handleClick在class examplePage 中定義的 ,

  • 所以this指向examplePage

  • 再看如果把箭頭函數改為普通函數的情況:

2. onClick = { this.handleClick.bind(this) } + 普通函數

先來看,如果不用bind(this),console.log(this)會輸出什么:

// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component {
    // 2. !將箭頭函數改為普通函數
    handleClick () {
        console.log(this); // 3. this 為 undefined
    }

    render() {
        return (
            <p>
            // 1. 為onClick綁定 handleClick事件處理函數
                <Button onClick = { this.handleClick }>click me</Button>
            </p>
        )
    }}export default examplePage;

點擊按鈕,打印出this:

this: undefined

分析:

  • 當點擊Button,調用handleClick事件處理函數,

  • 因為handleClick是一個普通函數,因此 this是 執行時上下文的this ,

  • handleClick在頁面中點擊Button時執行的 ,上下文環境是html的那個頁面

  • 所以this是undefined,并不指向examplePage

注:在嚴格版中,默認的this不再是window,而是undefined
Module code is always strict mode code.
All parts of a ClassDeclaration or ClassExpression are strict mode code.

因此需要用bind來改變this指向,即:

render() {
    return (
        <p>
        // 用bind改變this指向
           <Button onClick = { this.handleClick.bind(this) }>click me</Button>
        </p>
    )}

分析:

  • 當點擊Button,調用handleClick事件處理函數,

  • 通過bind()函數,將render函數的this(指向class examplePage),當作一個變量傳入handleClick

  • 本來handleClick是一個普通函數, this是 執行時上下文的this(即 undefined),但因為bind(this)傳入- - 了指向examplePage的this

  • 所以此時,this是指向examplePage,解決了this為undefined的問題

理解了上面兩個,最后一個就很好理解了:

3. onClick = { (params) => this.handleClick(params) } + 普通函數/箭頭函數都可

render() {
    return (
        <p>
        // 通過箭頭函數傳參
           <Button onClick = { (params) => this.handleClick(params) }></Button>
        </p>
    )}

分析:

  • 通過箭頭函數傳參數,相當于onClick綁定了一個箭頭函數

  • 點擊Button時,調用(params) => this.handleClick(params)這個箭頭函數,因此 this是 定義時上下文的this ,

  • handleClick在class examplePage 中定義的 ,

  • 所以this指向examplePage

  • 按這種思路,只要把onClick的響應事件用箭頭函數來寫,調用的時候,this指向的都是該組件class,就不會有問題

那么,不傳參的時候,就這么寫:

<Button onClick = { () => this.handleClick() }></Button>

但這是不可行的,因為react會直接解析()=> this.handleClick(), handleClick會被調用,相當于onClick = “調用handleClick的結果”

所以,不傳參數的時候只能這么寫:

<Button onClick = { this.handleClick }></Button>

總結
開頭的三個問題可以得到回答

  • 什么情況下需要bind(this)?
    答: onClick傳入的事件處理函數是普通函數的時候,需要bind(this)來改變指向

  • 為什么要用bind(this)?
    答:如果不用bind(this), this會指向undefined

  • 可以不用bind(this)嗎?
    答:用箭頭函數 (用箭頭函數定義事件處理函數)

//定義handleClick事件
handleClick = () => {
      // do something here
};

//為onClick綁定handleClick事件處理函數
<Button onClick = {this.handleClick}></Button> // 不傳參
<Button onClick = {(param) => this.handleClick(param) }></Button> // 傳參

感謝各位的閱讀,以上就是“react點擊事件的寫法有哪些”的內容了,經過本文的學習后,相信大家對react點擊事件的寫法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳江县| 桑日县| 长汀县| 长顺县| 遂宁市| 周宁县| 岫岩| 雷山县| 株洲市| 五寨县| 富源县| 宜州市| 博野县| 德州市| 万山特区| 兖州市| 商城县| 五大连池市| 芮城县| 大冶市| 陕西省| 石景山区| 普洱| 东阳市| 西充县| 沿河| 乌兰察布市| 张家界市| 石台县| 涿州市| 新化县| 新宾| 邹平县| 公主岭市| 西藏| 富平县| 宣恩县| 北京市| 吉林市| 宜宾市| 天峻县|