React中的一些困惑 bind this

2021-09-13 23:11:19 字數 1043 閱讀 5821

如果你用過react,或者正在用react作開發,就一定看過或者寫過這種**:

constructor(props)

handlerevent()

其實這三個問題可以一併說:首先,我們先把上面的**改一下:

class demo 

handlerevent()

}

在不考慮react的前提下,想要呼叫這個handlerevent函式那麼我們就要

new demo().handlerevent(),執行的結果為demo這個class,這說明呼叫handlerevent的是demo,可是如果把new demo()賦值給乙個變數變成這樣:

class demo 

handlerevent()

}let demo = new demo().handlerevent

demo.()

這裡的this就變成了undefined(不是指向window是因為使用class會觸發嚴格模式,所以this就成了undefined)。

看到這可能你已經有點明白我說了這麼多是啥意思了。

當你在react中繫結時間的時候一定會這樣寫:

render()
通過上面的例子可以知道,如果把乙個函式賦值給乙個變數,那麼它內部的this就會改變指向,這裡把handlerclick賦值給onclick的之前就繫結了內部的this(指向例項本身),所以就不會出現this指向錯誤的問題

當然解決這個問題的辦法不止這一種,你可以在宣告這個函式的時候就進行bind,也可以在呼叫處的外層包裹一層箭頭函式,也可以在例項化class的時候(在constructor函式中)將經過繫結的函式賦值給當前函式,方法如下:

class demo extends component

//方法2

fn().bind(this)

} arrow()

//方法3

render()}>按鈕

}}

使用james的一些困惑

自己搭建的james伺服器,一切皆如普善園的博文 在本機上接受,傳送一切正常。測試程式是用的spring對mail的支援 import org.springframework.mail.public class testmail localhost true 25000 jkfzero jkfzer...

學習Lua的一些困惑

學習lua的一些困惑 下面是我寫的 myclass function myclass.myf respath print respath的型別是 type respath n m id 這是乙個例項 print m id的型別是 type m id n endfunction game main r...

react學習中的一些細節

1 css相關 react的css引用方式 var styles require category.css import styles from category.css 傳統的方式是 元件的使用方式 test 傳統的方式是test 要使用兩個類,classname 想使用行內樣式,就是這樣的寫法 ...