日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

react之bind函数到组件通识篇

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 react之bind函数到组件通识篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在說起react的函數綁定之前,我們有必要了解下bind函數的作用是什么,函數的執行的上下文以及其默認的this是指向的哪里?有點抽象?那么你可以去看下下面的兩個方法的執行會有什么區別吧。

let customer={name:'Robin',getName:function(){console.log(this.name);} } customer.getName();//Robin let getName = customer.getName; getName();// CodePen let getNameWithCustomer = customer.getName.bind(customer); getNameWithCustomer();// Robin 復制代碼

如果你猜不出結果,可以看下我的codePen鏈接:鏈接,這是為什么呢?這是因為上下文不同,也就是this不同,當你通過賦值拿到方法,方法執行時會先去查看其上下文的this是什么,而不是直接使用其來源于哪個對象的。那么如果我們想使用對象里的屬性,可以使用bind方法綁定一個指定的對象。于是我們又得到了我們期望的name:robin值。

從上面的結果中,我們得到了以下的幾個認知:

1 函數調用時,只取決于其實際執行環境,與來源無關
2 如果我們希望函數執行或者函數拷貝時,不丟失參數,或者避免參數錯誤,我們應該將參數傳入,而不要過度依賴當前this的上下文。
3 如果我們只是一個工具函數,那么你可能沒有特別的場景一定要綁定什么,比如你定義一個add方法計算兩個參數的和,那么你不需要綁定其他的對象或者上下文。
4 如果我們希望函數執行時,在某個環境或者類內綁定指定的上下文,那么你需要顯性的綁定this才可以使用這個對象里的屬性以及屬性方法。
5 如果我們喜歡函數執行時,希望可以根據需求綁定任意的對象,也建議函數定義時,考慮好這一點,并綁定時綁定其對應的對象,這時候很可能你綁定的不是"this"。
6 bind方法只是改變上下文,并不會導致函數的執行。

備注:更多關于this的文章,詳解請看我另外兩篇文章,有非常詳盡的說明:神奇的this:鏈接, js中的作用域:鏈接

react中的事件綁定

react中的事件綁定,我們按照無參和有參兩種。無參非常簡單,直接綁定函數即可。當我們需要傳遞參數時,剛入門前端的人可能會直接綁定參數。這樣會導致兩個錯誤,1 丟失了事件參數 2 導致了函數的直接執行,而不是點擊后執行。(作為常識,我們還要知道,默認的點擊事件等事件是會返回event對象的哦)。

備注:如果你不清楚前端的事件流機制,可以查看我的js中事件流機制:鏈接

handleClick(e){ const {type} = e;// click} render(){const text = 'button text';return (<button onClick={this.handleClick}></button>)} // 直接傳參會導致錯誤 render(){const text = 'button text';return (<button onClick={this.handleClick(text)}></button>)}// 通過箭頭函數 避免這種問題 render(){const text = 'button text';return (<button onClick={(e,text) => this.handleClick(e,text)}></button>)} 復制代碼

所以你通過箭頭函數避免了上面的錯誤,但這種使用與我們的常規使用是不同的。為什么呢?因為我們一般在react組件中需要經常使用當前組件的上下文,包括當前組件的state、方法以及傳入的屬性等。這時候,我們想起了前言中的bind語法,其可以改變上下文的this,支持事件獲知的同時,綁定當前對象。而且我們通過bind的語法清楚,其不但可以綁定上下文,還可以支持靈活的傳參,如果你不清楚其基本語法,可以查看js- MDN的介紹:鏈接.

下面的內容借鑒于react中文官網的教程--傳遞函數給組件,做了簡單的整理:原文鏈接:鏈接,有以下的幾種方式。

// 第一種 :render 中bind綁定 render(){const text = 'button text';return (<button onClick={ this.handleClick.bind(this,text)}></button>) } // 第二種 :constructor bind綁定 constructor(props){this.handleClick = this.handleClick.bind(this); } render(){const text = 'button text';return (<button onClick={ (e,text)=> this.handleClick(e,text)}></button>) }// 第三種 :class func 箭頭函數 <=> 上面的調用方法均是常規方法寫法 handleClick=()=>{} render(){const text = 'button text';return (<button onClick={(e,text)=> this.handleClick(e,text)}></button>) } 復制代碼

需要注意的是,在官網文檔中,我們看到在rende函數中使用箭頭函數以及使用bind綁定都會影響性能,而在constructor中將所有函數綁定一遍又過于繁瑣,我們一般的框架中習慣于使用class 屬性函數,--箭頭函數的方式實現,也就是上面代碼中的第三種,同樣,我們在react ant的ui框架的input組件中找到了icon的元素事件傳遞的方式也是第三種,查看鏈接。參考下面的原代碼:

handleReset = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {this.setValue('', e, () => {this.focus();});};renderClearIcon(prefixCls: string) {const { allowClear } = this.props;const { value } = this.state;if (!allowClear || value === undefined || value === null || value === '') {return null;}return (<Icontype="close-circle"theme="filled"onClick={this.handleReset}className={`${prefixCls}-clear-icon`}role="button"/>);} 復制代碼

小結

通過本文希望你能清楚我們為什么要bind this,以及如何正確綁定的一些可行方式,和每種方式的優缺點,還有一些如何避免低級錯誤,導致函數直接執行的原因。同樣,我們也知道了一般的ui框架中采用的是哪種方式--類屬性的方式。

更多精彩內容跳轉:原文語雀連接

寄語

我們一起從從小白到大師。? ? ? ? ? ? ? ? ? ? ? --- Robin

轉載于:https://juejin.im/post/5ca81acce51d452e62014939

總結

以上是生活随笔為你收集整理的react之bind函数到组件通识篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精久久久久 | 色哟哟国产| 喷水视频在线观看 | 国产免费一区二区三区视频 | 自拍第一页 | 成人免费在线视频网站 | 波多野结衣不卡视频 | 日韩欧美在线观看一区二区三区 | 张柏芝54张无删码视频 | 午夜a视频 | 亚洲一区二区中文字幕 | 亚洲精品一区二区三区婷婷月 | av这里只有精品 | 黄色网页大全 | 欧美在线国产 | 第一色综合 | 中文字幕精品在线 | 激情欧美一区二区免费视频 | 国产最新自拍 | 日韩欧美国产高清91 | 美女视频在线免费观看 | 亚洲一区二区三区四区在线播放 | 亚洲av无码成人精品国产 | 欧美视频在线免费 | 国产精品色片 | 国产日韩欧美一区 | 国产av人人夜夜澡人人爽麻豆 | 手机在线观看免费av | 一区二区三区国产av | 午夜家庭影院 | 91私拍| 欧洲成人免费视频 | 蜜桃av影视 | 国产97av | 法国空姐电影在线观看 | 天天爱夜夜操 | 五月天爱爱 | 日韩成人久久 | 久久九九视频 | 欧美黄色a | 欧美 日韩 综合 | 狠狠操狠狠插 | 极品少妇视频 | 亚洲成av人片在线观看无码 | 九一网站在线观看 | 欧美熟妇精品黑人巨大一二三区 | 男女激情视频网站 | 日本一区二区不卡在线 | 国产做爰全过程免费视频 | 自拍99页 | 国产性一乱一性一伧一色 | 99久久精品国产亚洲 | 欧美一区三区三区高中清蜜桃 | 亚洲第一页在线 | 美女少妇毛片 | www.色婷婷.com | 日日不卡av | 黄色片中文字幕 | 日韩av在线一区二区三区 | 麻豆导航 | 国产女人水真多18毛片18精品 | 人人爽视频 | 波多野结衣 在线 | 亚洲av乱码一区二区 | 中文久久精品 | av黄在线观看 | 欧美午夜精品久久久久久浪潮 | 麻豆黄色一级片 | 岛国片在线播放 | 91精产国品一二三 | 亚洲欧美日韩在线一区二区 | 亚洲伦理在线 | 欧美色性视频 | 九九九热视频 | 亚洲欧洲在线观看 | 5566毛片| 亚洲一区二区三区高清 | 天天操精品 | 欧美一级鲁丝片 | 少妇高潮一区二区三区四区 | 国产网址在线观看 | 亚洲人毛茸茸 | 亚洲色网址 | free性中国hd国语露脸 | 尹人av| 蜜臀va | 色av一区二区三区 | 亚洲视频在线观看一区二区三区 | 日韩成人精品一区二区 | 99热国| 神马久久久久久久 | 日韩日b视频 | 嫩草大剧院 | 欧美色婷婷 | 嫩草社区 | 国产亚洲欧美日韩精品 | 午夜大片 | 性色在线视频 | 欧美日韩一区二区三区69堂 |