React this繫結的幾點思考

2021-08-20 14:44:50 字數 1237 閱讀 5228

我們在react專案開發時,通常會遇到this繫結的問題。解決的方法總結下分為下面的三種情況:

import react from 'react'

export default

class

demo

extends

react.component

click1()

click2=()=>

click3()

render()>

this.click3.bind(this)}>

div>}}

三種方式都能達到同樣的效果,但是效能上還是有很大的差別的。

首先,第三種方式效能是最差的,每次在render的時候都要去繫結this

對於第二種和第三種,我們這樣看其實看不出差別,但是如果我們將**編譯為es5之後,就能看到其中的區別了:

首先,使用箭頭函式的方式,該方式其實是定義在this上的,也就是說,在每乙個例項化之後的this都會定義該方法,但是通過方式1,該方式其實是定義在prototype上的,各個例項物件共享該方法。所以,單純從記憶體空間的消耗上來看,方式1其實是最好的。

但是定義在原型鏈上的方法,在實際呼叫該方法的時候,其查詢的過程是這樣的:

首先檢查this上是否有該方法的定義,如果沒有的話,則去prototype上查詢是否有該方法,所以在方法呼叫的過程中,會經歷一次跨原型鏈的查詢。該過程是方法1帶來的額外的消耗。

但是箭頭函式的方式,在實際呼叫的時候,訪問的是外層作用快取的_this, 所以在作用域查詢上有一層消耗。

經過私底下的測試發現,在原型鏈上的查詢比作用域上的查詢,效能會好很多。所以綜合來看,還是第二種的方式是最優的。

另外,看老外的**中,發現過乙個批量繫結的方式,其實是對方案一的一種優化,可以簡單借鑑一下:

浮動的幾點

下面是一些自己理解和網上摘錄的 浮動的元素會脫離normal流 文件流或標準流 例子 浮動的元素會脫離normal流 文件流或標準流 br 所以div2無法識別div1的位置,就出現在首位,結果div1會覆蓋div2。br 如果div2長度少於div1長度,就完全被覆蓋 br 無論div2長度是多少...

關於css的幾點

花了兩個星期,我看完了 精通css 高階web標準解決方案 第2版 看完了這本書我學到了很多。1 是關於背景定位的 使用畫素設定背景定位和使用百分數進行背景定位是不一樣的,如果使用畫素設定背景定位,那麼影象左上角到元素左上角的距離為指定的畫素值。而百分數定位並不對背景影象的左上角進行定位,而是使用影...

UIImage的幾點建議

兩種初始化方式 1 uiimage imagenamed 適合 ui介面中反覆使用的貼圖,因為會儲存在 cache 中,所以速度會有保障。但是對使用次數較少,較大時候,不應這樣採用,因為會占用大量的 cache。2 uiimageimagewithcontentsoffile 直接從檔案中讀取,儲存...