0
我使用的是類的語法來聲明一個反應成分:這兩個聲明在反應JavaScript之間有什麼區別?
import React, {Component} from 'react'
class Page extends Component {
constructor(props) {
super(props)
this.state = {value: ''}
}
doA(event) {this.setState({value: event.target.value})}
doB = (event) => {this.setState({value: event.target.value})}
render {
return (
<input type="text" onChange={this.doB}/>
{*the following is wrong:*}
{*<input type="text" onChange={this.doA}/>*}
)
}
}
如果我嘗試使用doA
onChange
來處理,我得到這個錯誤:TypeError: Cannot read property 'setState' of undefined
。
doA
的聲明看起來更像Java中的類方法,並且doB
的聲明看起來更像是分配給類屬性的匿名函數。我本來以爲onChange = this.doA
會保留this
分配給這個班級,但這是相反的。 onChange = doB
保留this
分配給該類。
我試着尋找解釋,但我不知道正確的術語,因此我的搜索條件很差。
附註:如果我使用onChange = doA
,則會出現該錯誤,但輸入字段仍然會正確更新。所以this.state.value
正在改變,但它給了我這個錯誤。這是爲什麼?