最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React事件綁定的方式詳解

 更新時間:2021年07月24日 08:21:51   作者:喆星高照  
react事件綁定時。this并不會指向當(dāng)前DOM元素。往往使用bind來改變this指向,今天通過本文給大家介紹React事件綁定的方式,感興趣的朋友

一、是什么

react應(yīng)用中,事件名都是用小駝峰格式進(jìn)行書寫,例如onclick要改寫成onClick

最簡單的事件綁定如下:

class ShowAlert extends React.Component {
  showAlert() {
    console.log("Hi");
  }

  render() {
    return <button onClick={this.showAlert}>show</button>;
  }
}

從上面可以看到,事件綁定的方法需要使用{}包住

上述的代碼看似沒有問題,但是當(dāng)將處理函數(shù)輸出代碼換成console.log(this)的時候,點擊按鈕,則會發(fā)現(xiàn)控制臺輸出undefined

二、如何綁定

為了解決上面正確輸出this的問題,常見的綁定方式有如下:

  • render方法中使用bind
  • render方法中使用箭頭函數(shù)
  • constructor中bind
  • 定義階段使用箭頭函數(shù)綁定

render方法中使用bind

如果使用一個類組件,在其中給某個組件/元素一個onClick屬性,它現(xiàn)在并會自定綁定其this到當(dāng)前組件,解決這個問題的方法是在事件函數(shù)后使用.bind(this)this綁定到當(dāng)前組件中

class App extends React.Component {
  handleClick() {
    console.log('this > ', this);
  }
  render() {
    return (
      <div onClick={this.handleClick.bind(this)}>test</div>
    )
  }
}

這種方式在組件每次render渲染的時候,都會重新進(jìn)行bind的操作,影響性能

render方法中使用箭頭函數(shù)

通過ES6的上下文來將this的指向綁定給當(dāng)前組件,同樣在每一次render的時候都會生成新的方法,影響性能

class App extends React.Component {
  handleClick() {
    console.log('this > ', this);
  }
  render() {
    return (
      <div onClick={e => this.handleClick(e)}>test</div>
    )
  }
}

constructor中bind

constructor中預(yù)先bind當(dāng)前組件,可以避免在render操作中重復(fù)綁定

class App extends React.Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick() {
    console.log('this > ', this);
  }
  render() {
    return (
      <div onClick={this.handleClick}>test</div>
    )
  }
}

定義階段使用箭頭函數(shù)綁定

跟上述方式三一樣,能夠避免在render操作中重復(fù)綁定,實現(xiàn)也非常的簡單,如下:

class App extends React.Component {
  constructor(props) {
    super(props);
  }
  handleClick = () => {
    console.log('this > ', this);
  }
  render() {
    return (
      <div onClick={this.handleClick}>test</div>
    )
  }
}

三、區(qū)別

上述四種方法的方式,區(qū)別主要如下:

  • 編寫方面:方式一、方式二寫法簡單,方式三的編寫過于冗雜
  • 性能方面:方式一和方式二在每次組件render的時候都會生成新的方法實例,性能問題欠缺。若該函數(shù)作為屬性值傳給子組件的時候,都會導(dǎo)致額外的渲染。而方式三、方式四只會生成一個方法實例

綜合上述,方式四是最優(yōu)的事件綁定方式

到此這篇關(guān)于React事件綁定的方式的文章就介紹到這了,更多相關(guān)React事件綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet)的示例代碼

    reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet)的示例代碼

    這篇文章主要介紹了reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • React生命周期函數(shù)深入全面介紹

    React生命周期函數(shù)深入全面介紹

    生命周期函數(shù)指在某一時刻組件會自動調(diào)用并執(zhí)行的函數(shù)。React每個類組件都包含生命周期方法,以便于在運行過程中特定的階段執(zhí)行這些方法
    2022-09-09
  • react中使用Modal.confirm數(shù)據(jù)不更新的問題完美解決方案

    react中使用Modal.confirm數(shù)據(jù)不更新的問題完美解決方案

    這篇文章主要介紹了react中使用Modal.confirm數(shù)據(jù)不更新的問題解決方案,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • React中組件優(yōu)化的最佳方案分享

    React中組件優(yōu)化的最佳方案分享

    React組件性能優(yōu)化可以減少渲染真實DOM的頻率,以及減少VD比對的頻率,本文為大家整理了一些有效的React組件優(yōu)化方法,需要的小伙伴可以參考下
    2023-12-12
  • 詳解React項目中碰到的IE問題

    詳解React項目中碰到的IE問題

    這篇文章主要介紹了React項目中碰到的IE問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解React中Fragment的簡單使用

    詳解React中Fragment的簡單使用

    這篇文章主要介紹了詳解React中Fragment的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對我們學(xué)習(xí)React有一定的幫助,感興趣的小伙伴們可以參考一下
    2022-10-10
  • React Hook - 自定義Hook的基本使用和案例講解

    React Hook - 自定義Hook的基本使用和案例講解

    自定義Hook本質(zhì)上只是一種函數(shù)代碼邏輯的抽取,嚴(yán)格意義上來說,它本身并不算React的特性,這篇文章主要介紹了React類組件和函數(shù)組件對比-Hooks的介紹及初體驗,需要的朋友可以參考下
    2022-11-11
  • React手寫redux過程分步講解

    React手寫redux過程分步講解

    這篇文章主要介紹了React手寫redux過程,目前redux在react中使用是最多的,所以我們需要將之前編寫的redux代碼,融入到react當(dāng)中去,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-12-12
  • react的ui庫antd中form表單使用SelectTree反顯問題及解決

    react的ui庫antd中form表單使用SelectTree反顯問題及解決

    這篇文章主要介紹了react的ui庫antd中form表單使用SelectTree反顯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Electron整合React使用搭建開發(fā)環(huán)境的步驟詳解

    Electron整合React使用搭建開發(fā)環(huán)境的步驟詳解

    這篇文章主要介紹了Electron整合React使用搭建開發(fā)環(huán)境,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-06-06

最新評論

巴塘县| 定边县| 高雄市| 太仓市| 新河县| 栾川县| 石林| 龙陵县| 东乌珠穆沁旗| 延吉市| 通海县| 镇雄县| 从江县| 石渠县| 香格里拉县| 柘城县| 贡嘎县| 离岛区| 垣曲县| 新巴尔虎左旗| 新宾| 建昌县| 上虞市| 灵丘县| 伊吾县| 盐池县| 元阳县| 筠连县| 寻乌县| 保德县| 神木县| 克什克腾旗| 庆安县| 克山县| 佳木斯市| 清流县| 盘山县| 白山市| 油尖旺区| 东源县| 涟水县|