久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

為什么react需要綁定this

react需要綁定this的原因:在組件上綁定事件監聽器,是為了響應用戶的交互動作,特定的交互動作觸發事件時,監聽函數中往往都需要操作組件某個狀態的值,進而對用戶的點擊行為提供響應反饋

為什么react需要綁定this

本教程操作環境:windows7系統、React17版,DELL G3電腦。

推薦:react視頻教程

react需要綁定this的原因:

1. 代碼執行的細節

當在其他組件中調用或是使用ReactDOM.render()方法將其渲染到界面上時會生成一個組件的實例,因為組件是可以復用的,面向對象的編程方式非常適合它的定位。根據this指向的基本規則就可以知道,這里的this最終會指向組件的實例。

組件實例生成的時候,構造器constructor會被執行,此處著重分析一下下面這行代碼:

this.handleClick = this.handleClick.bind(this);

此時的this指向新生成的實例,那么賦值語句右側的表達式先查找this.handleClick( )這個方法,由對象的屬性查找機制(沿原型鏈由近及遠查找)可知此處會查找到原型方法this.handleClick( ),接著執行bind(this),此處的this指向新生成的實例,所以賦值語句右側的表達式計算完成后,會生成一個指定了this的新方法,接著執行賦值操作,將新生成的函數賦值給實例的handleClick屬性,由對象的賦值機制可知,此處的handleClick會直接作為實例屬性生成??偨Y一下,上面的語句做了一件這樣的事情:

把原型方法handleClick()改變為實例方法handleClick(),并且強制指定這個方法中的this指向當前的實例。

2. ES5的寫法中為什么不用bind(this)?

ES5的寫法是指使用React.createClass( )方法來定義組件,React在V16以上的新版本中已經移除了這個API,你可以通過閱讀更早版本的源代碼看到這個方法的細節。

  //舊版本`react`中`createClass`方法片段   if (this.__reactAutoBindMap) {         this._bindAutoBindMethods();   }

在老版本的React中,createClass()的定義中可以看到上面的代碼,拋開其他復雜的邏輯,從方法名就可以看出這是一個自動綁定的方法,實際上在這個方法中所完成的,就是對組件中自定義方法的this強制綁定,感興趣的讀者可以自行翻看源碼了解細節。

3. 綁定this的必要性

在組件上綁定事件監聽器,是為了響應用戶的交互動作,特定的交互動作觸發事件時,監聽函數中往往都需要操作組件某個狀態的值,進而對用戶的點擊行為提供響應反饋,對開發者來說,這個函數觸發的時候,就需要能夠拿到這個組件專屬的狀態合集(例如在上面的開關組件ToggleButton例子中,它的內部狀態屬性state.isToggleOn的值就標記了這個按鈕應該顯示ON或者OFF),所以此處強制綁定監聽器函數的this指向當前實例的也很容易理解。

React構造方法中的bind會將響應函數與這個組件Component進行綁定以確保在這個處理函數中使用this時可以時刻指向這一組件的實例。

4. 如果不綁定this

如果類定義中沒有綁定this的指向,當用戶的點擊動作觸發this.handleClick()這個方法時,實際上執行的是原型方法,可這樣看起來并沒有什么影響,如果當前組件的構造器中初始化了state這個屬性,那么原型方法執行時,this.state會直接獲取實例的state屬性,如果構造其中沒有初始化state這個屬性(比如React中的UI組件),說明組件沒有自身狀態,此時即使調用原型方法似乎也沒什么影響。

事實上的確是這樣,這里的bind(this)所希望提前規避的,就是著名的this指針丟失的問題。

例如使用解構賦值的方式獲取某個屬性方法時,就會造成引用轉換丟失this的問題:

const toggleButton = new ToggleButton();
import {handleClick} = toggleButton;

上例中解構賦值獲取到的handleClick這個方法在執行時就會報錯,Class的內部是強制運行在嚴格模式下的,此處的this在賦值中丟失了原有的指向,在運行時指向了undefined,而undefined是沒有屬性的。

另一個存在的限制,是沒有綁定this的響應函數在異步運行時可能會出問題,當它作為回調函數被傳入一個異步執行的方法時,同樣會因為丟失了this的指向而引發錯誤。

如果沒有強制指定組件實例方法的this,在將來的使用中就無法安心使用引用轉換或作為回調函數傳遞這樣的方式,對于后續使用和協作開發而言都是不方便的。

5. 小結

this的使用非常靈活,但這種靈活性也帶來了很多混亂。這里的bind(this)是為了改進javascript語言級的缺陷,并不是只有React中才需要這樣做,這個問題是伴隨著面向對象編程而產生的,在使用javascript進行插件和框架的開發時,這個問題的影響會更加明顯。之所以說它是一個語言級的缺陷,是因為Java中對于this在同樣場景下的指向更符合正常思維邏輯,而javascript中如果不顯示綁定,就會出現語言運行結果和方法的命名表意不一致的情況。

相關免費學習推薦:javascript視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产毛片精品久久| 日本一区二区三区视频在线看| 国产一区二区精品福利地址| 91大神在线观看线路一区| 免费久久99精品国产| 久久av在线| 日韩高清一区在线| 日韩福利视频导航| 麻豆视频一区二区| 国产精品一区二区av交换| 久久久久久久久久久妇女| 日本不卡一区二区| 色88888久久久久久影院| 亚洲午夜久久久久久尤物| 巨乳诱惑日韩免费av| 99国产精品99久久久久久粉嫩| 国产精品亚洲产品| 视频福利一区| 性欧美xxxx免费岛国不卡电影| 日韩精品一区二区三区免费观看| 国产视频一区三区| 精品九九久久| 成人美女视频| 国产91精品对白在线播放| 欧美天堂亚洲电影院在线观看| 亚洲专区一区| 欧美日韩调教| 91麻豆国产自产在线观看亚洲| 久久久精品久久久久久96| 欧美综合国产| 成人免费网站www网站高清| 亚洲精品第一| 欧洲一区二区三区精品| 欧美二三四区| 久热精品在线| 91青青国产在线观看精品| 日韩精品一二三四| 亚洲激情中文| 国产欧美另类| 综合欧美精品| 日韩在线一二三区| 亚洲成人二区| 亚洲一区不卡| 亚洲综合在线电影| 久久精品国产99国产精品| 日韩影院在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜臀91精品一区二区三区| 日韩免费福利视频| 午夜亚洲精品| 日韩午夜精品| 亚洲神马久久| 国产欧美日韩精品一区二区三区| av高清不卡| 在线精品国产亚洲| 成人影视亚洲图片在线| 蜜乳av另类精品一区二区| 国产欧美午夜| 男女男精品视频网| 国产精品一区二区免费福利视频| 亚洲一区二区动漫| 久久成人精品| 欧美日韩日本国产亚洲在线 | 日本一区二区三区中文字幕| sm捆绑调教国产免费网站在线观看 | 久久久久久久久成人| 亚洲一区二区成人| 亚洲一区二区成人| 91高清一区| 日韩黄色av| 日韩不卡在线观看日韩不卡视频| 久久亚洲二区| 成人三级高清视频在线看| 在线亚洲激情| 亚洲一区资源| 激情丁香综合| 国产一区二区色噜噜| 久久精品国产网站| 中文精品视频| 国产日韩一区| aa国产精品| 日本不良网站在线观看| 日韩免费精品| 午夜电影亚洲| 国产一区二区亚洲| 91成人福利| 亚洲一区二区三区高清不卡| 久久精品国产久精国产爱| 免费黄网站欧美| 久久婷婷av| 日韩a一区二区| 欧美一区自拍| 中文字幕亚洲在线观看| 亚洲精品网址| 秋霞国产精品| 国产成人久久精品麻豆二区 | 最新亚洲激情| 亚洲高清毛片| 日韩理论视频| 水蜜桃精品av一区二区| 久久国产乱子精品免费女| 蜜桃视频免费观看一区| 尤物精品在线| 亚洲先锋成人| 四虎884aa成人精品最新| 国产盗摄——sm在线视频| 久久99蜜桃| 美女在线视频一区| 久久影院一区二区三区| 麻豆精品新av中文字幕| 国产精品香蕉| 国产精品亚洲综合在线观看| 国产一区 二区| 久久狠狠久久| 国产欧美丝祙| 国产精品久久免费视频| 色婷婷成人网| 日本伊人久久| 青青草国产成人99久久| 日本成人中文字幕在线视频| 亚洲ab电影| 欧美日韩午夜电影网| 国产精品羞羞答答在线观看| 欧美1区2区3| 精品精品国产三级a∨在线| 精品视频99| 97人人精品| 日韩和的一区二在线| 久久激情网站| 性欧美69xoxoxoxo| 午夜在线观看免费一区| 黄色亚洲大片免费在线观看| 日韩一区二区久久| 老牛国产精品一区的观看方式| 蜜桃一区二区三区在线| 日韩欧美2区| 国产美女亚洲精品7777| 欧美1区2区3| 日韩三区免费| 午夜宅男久久久| 日韩高清不卡在线| 精品视频高潮| 久久久久午夜电影| 久久www成人_看片免费不卡| 中文字幕av亚洲精品一部二部| 91欧美极品| 国产精品一区二区精品| 日韩av免费大片| 国户精品久久久久久久久久久不卡| 国产一区成人| 国产亚洲久久| av在线最新| 日韩午夜高潮| 久久国产人妖系列| 最新中文字幕在线播放 | 欧美精选视频一区二区| 亚洲欧美日韩一区在线观看| 日韩国产高清在线| 久久久久观看| 日韩精品诱惑一区?区三区| 五月天久久777| 日韩国产欧美一区二区三区| 成人精品视频| 国产女优一区| 国产精品成人3p一区二区三区| 精品国产免费人成网站| 亚洲综合丁香| 国产精久久久| 激情久久婷婷| 日韩av资源网| 日本蜜桃在线观看视频| 热久久国产精品| 精品资源在线| 欧美特黄一区| 国产人成精品一区二区三| 天堂av在线| 亚洲精品系列| 国产传媒在线观看| 亚洲精品成a人ⅴ香蕉片| 91综合视频| 日韩有吗在线观看| 欧美香蕉视频| 婷婷久久免费视频| 欧洲一区二区三区精品| 天堂久久一区| 欧美亚洲精品在线| 国产情侣一区在线| 欧美精品自拍| 精品在线网站观看| 亚洲资源在线| 97精品97| 亚久久调教视频| 成人羞羞视频在线看网址| 免费成人性网站| 国产在线|日韩| 国产精品羞羞答答在线观看| 中文亚洲免费| 日韩高清欧美| 国产精品伦一区二区| 日韩精品一二三四|