1. 程式人生 > >React事件中遇到的一個小坑

React事件中遇到的一個小坑

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事件中遇到的一個小坑