新聞中心
本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括寶山網(wǎng)站建設(shè)、寶山網(wǎng)站制作、寶山網(wǎng)頁(yè)制作以及寶山網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,寶山網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到寶山省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一、React事件綁定是什么
在react應(yīng)用中,事件名都是用小駝峰格式進(jìn)行書寫,例如onclick要改寫成onClick
最簡(jiǎn)單的事件綁定如下:
- class ShowAlert extends React.Component {
- showAlert() {
- console.log("Hi");
- }
- render() {
- return ;
- }
- }
從上面可以看到,事件綁定的方法需要使用{}包住
上述的代碼看似沒有問題,但是當(dāng)將處理函數(shù)輸出代碼換成console.log(this)的時(shí)候,點(diǎn)擊按鈕,則會(huì)發(fā)現(xiàn)控制臺(tái)輸出undefined
二、如何綁定
為了解決上面正確輸出this的問題,常見的綁定方式有如下:
- render方法中使用bind
- render方法中使用箭頭函數(shù)
- constructor中bind
- 定義階段使用箭頭函數(shù)綁定
render方法中使用bind
如果使用一個(gè)類組件,在其中給某個(gè)組件/元素一個(gè)onClick屬性,它現(xiàn)在并會(huì)自定綁定其this到當(dāng)前組件,解決這個(gè)問題的方法是在事件函數(shù)后使用.bind(this)將this綁定到當(dāng)前組件中
- class App extends React.Component {
- handleClick() {
- console.log('this > ', this);
- }
- render() {
- return (
test- )
- }
- }
這種方式在組件每次render渲染的時(shí)候,都會(huì)重新進(jìn)行bind的操作,影響性能
render方法中使用箭頭函數(shù)
通過ES6的上下文來將this的指向綁定給當(dāng)前組件,同樣在每一次render的時(shí)候都會(huì)生成新的方法,影響性能
- class App extends React.Component {
- handleClick() {
- console.log('this > ', this);
- }
- render() {
- return (
this.handleClick(e)}>test- )
- }
- }
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 (
test- )
- }
- }
定義階段使用箭頭函數(shù)綁定
跟上述方式三一樣,能夠避免在render操作中重復(fù)綁定,實(shí)現(xiàn)也非常的簡(jiǎn)單,如下:
- class App extends React.Component {
- constructor(props) {
- super(props);
- }
- handleClick = () => {
- console.log('this > ', this);
- }
- render() {
- return (
test- )
- }
- }
三、區(qū)別
上述四種方法的方式,區(qū)別主要如下:
編寫方面:方式一、方式二寫法簡(jiǎn)單,方式三的編寫過于冗雜
性能方面:方式一和方式二在每次組件render的時(shí)候都會(huì)生成新的方法實(shí)例,性能問題欠缺。若該函數(shù)作為屬性值傳給子組件的時(shí)候,都會(huì)導(dǎo)致額外的渲染。而方式三、方式四只會(huì)生成一個(gè)方法實(shí)例
綜合上述,方式四是最優(yōu)的事件綁定方式
參考文獻(xiàn)
https://segmentfault.com/a/1190000011317515
https://vue3js.cn/interview/
當(dāng)前名稱:面試官:React事件綁定的方式有哪些?區(qū)別?
鏈接URL:http://www.dlmjj.cn/article/coocdjg.html


咨詢
建站咨詢
