成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:React事件綁定的方式有哪些?區(qū)別?

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

[[408554]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

一、React事件綁定是什么

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

最簡單的事件綁定如下:

  1. class ShowAlert extends React.Component { 
  2.   showAlert() { 
  3.     console.log("Hi"); 
  4.   } 
  5.  
  6.   render() { 
  7.     return <button onClick={this.showAlert}>show</button>; 
  8.   } 

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

上述的代碼看似沒有問題,但是當(dāng)將處理函數(shù)輸出代碼換成console.log(this)的時(shí)候,點(diǎn)擊按鈕,則會發(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)前組件中

  1. class App extends React.Component { 
  2.   handleClick() { 
  3.     console.log('this > ', this); 
  4.   } 
  5.   render() { 
  6.     return ( 
  7.       <div onClick={this.handleClick.bind(this)}>test</div> 
  8.     ) 
  9.   } 

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

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

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

  1. class App extends React.Component { 
  2.   handleClick() { 
  3.     console.log('this > ', this); 
  4.   } 
  5.   render() { 
  6.     return ( 
  7.       <div onClick={e => this.handleClick(e)}>test</div> 
  8.     ) 
  9.   } 

constructor中bind

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

  1. class App extends React.Component { 
  2.   constructor(props) { 
  3.     super(props); 
  4.     this.handleClick = this.handleClick.bind(this); 
  5.   } 
  6.   handleClick() { 
  7.     console.log('this > ', this); 
  8.   } 
  9.   render() { 
  10.     return ( 
  11.       <div onClick={this.handleClick}>test</div> 
  12.     ) 
  13.   } 

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

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

  1. class App extends React.Component { 
  2.   constructor(props) { 
  3.     super(props); 
  4.   } 
  5.   handleClick = () => { 
  6.     console.log('this > ', this); 
  7.   } 
  8.   render() { 
  9.     return ( 
  10.       <div onClick={this.handleClick}>test</div> 
  11.     ) 
  12.   } 

三、區(qū)別

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

編寫方面:方式一、方式二寫法簡單,方式三的編寫過于冗雜

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

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

參考文獻(xiàn)

https://segmentfault.com/a/1190000011317515

 

https://vue3js.cn/interview/

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-07-02 07:06:20

React組件方式

2021-07-05 11:06:11

組件React通信

2024-02-26 14:07:18

2024-03-12 14:36:44

微服務(wù)HTTPRPC

2021-08-02 08:34:20

React性能優(yōu)化

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2021-07-14 08:00:13

reactCss模塊

2021-09-30 07:57:13

排序算法面試

2021-06-30 07:19:36

React事件機(jī)制

2023-02-20 08:08:48

限流算法計(jì)數(shù)器算法令牌桶算法

2021-10-21 07:18:02

微信程序方式

2021-07-06 07:27:45

React元素屬性

2024-04-19 00:00:00

計(jì)數(shù)器算法限流算法

2022-03-21 07:35:34

處理方式跨域

2024-03-07 17:21:12

HotSpotJVMHot Code

2025-03-26 01:25:00

MySQL優(yōu)化事務(wù)

2021-08-11 08:53:23

Git命令面試

2024-10-31 09:30:05

線程池工具Java

2021-05-27 05:37:10

HTTP請求頭瀏覽器

2024-05-29 14:34:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产成人精品一区二区三 | 成人在线免费av | 婷婷国产一区二区三区 | 自拍偷拍第一页 | 在线视频日韩精品 | www久久久 | 亚洲一区中文字幕在线观看 | 美女视频. | 在线免费黄色小视频 | 另类在线| 在线男人天堂 | 久久99网| 国产精品久久久久久52avav | 久久专区 | 成人国产一区二区三区精品麻豆 | 成人免费小视频 | 日韩在线视频一区 | 欧美在线播放一区 | 精品国产乱码久久久久久丨区2区 | ririsao久久精品一区 | av毛片 | 日韩电影a | 91麻豆精品国产91久久久久久 | 欧美一级免费 | 精品国产欧美一区二区三区不卡 | 国产 日韩 欧美 在线 | 久久99精品久久久久久噜噜 | 国产一区二区三区视频 | 亚洲精品日韩一区二区电影 | 91精品中文字幕一区二区三区 | 丁香久久 | 在线观看国产视频 | 欧美精品久久久久 | 欧洲一级黄 | 国产精品日韩在线观看一区二区 | 久久成人人人人精品欧 | 国产成人免费视频网站视频社区 | 国产一区二区久久 | 国产成人综合一区二区三区 | 中文字幕精品一区二区三区在线 | 中文字幕一级 |