React事件中遇到的一個小坑
阿新 • • 發佈:2018-07-05
efi 指向 什麽 找到 stat 觸發 ... 點擊 his
和
一個點擊按鈕數字加1的小程序,我在第一次看書中的這段代碼的時候,第一眼我就對this.handleClick = this.handleClick.bind
這句話表示有點疑問,類中handleClick
方法不是定義在原型對象中的嘛,實例對象顯示地調用方法this
不應該就是指向對象自身嗎,再添這句話豈不是多此一舉
直到我上手去敲了一遍示例代碼,特意把上面這句話刪除發現點擊按鈕的時候報錯,undefined
沒有setState
這個屬性,這就很奇怪了呀...是不是應該this.handleClick()
呀,想到在vue.js
中, 函數沒有參數的情況下如@click="handleClick"
@click="handleClick()"
是一樣的。然後試了下,直接報錯“Maximum update depth exceeded”
...原來此時它會直接運行這個函數而不是在點擊button 的時候調用。
理了理頭緒,大概是這樣,在不加()的情況下,是會在點擊的時候執行這個函數,但此時只是事先指明了這個事件處理程序,點擊button的時候是調用handleClick()
這個方法而不是調用this.handleClick()
,這個this
的作用只是為找到handleClick
,否則會報錯handleClick is not defined
..
那還有什麽辦法可以不用在構造方法中將方法的this重新指向呢?看下圖
我們可以在this.handleClick()
外層再嵌套一個函數,在點擊的時候觸發這個函數,然後再在函數中執行this.handleClick()
語句
React事件中遇到的一個小坑