自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[408554]]

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

一、React事件綁定是什么

在react應用中,事件名都是用小駝峰格式進行書寫,例如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.   } 

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

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

二、如何綁定

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

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

render方法中使用bind

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

  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渲染的時候,都會重新進行bind的操作,影響性能

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

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

  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中預先bind當前組件,可以避免在render操作中重復綁定

  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操作中重復綁定,實現(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ù)作為屬性值傳給子組件的時候,都會導致額外的渲染。而方式三、方式四只會生成一個方法實例

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

參考文獻

https://segmentfault.com/a/1190000011317515

 

https://vue3js.cn/interview/

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

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

微服務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事件機制

2023-02-20 08:08:48

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

2021-10-21 07:18:02

微信程序方式

2021-07-06 07:27:45

React元素屬性

2024-04-19 00:00:00

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

2022-03-21 07:35:34

處理方式跨域

2025-03-26 01:25:00

MySQL優(yōu)化事務

2024-03-07 17:21:12

HotSpotJVMHot Code

2021-08-11 08:53:23

Git命令面試

2024-10-31 09:30:05

線程池工具Java

2024-05-29 14:34:07

2021-05-27 05:37:10

HTTP請求頭瀏覽器
點贊
收藏

51CTO技術棧公眾號