gpt4 book ai didi

javascript - React javascript 中这两个声明有什么区别?

转载 作者:行者123 更新时间:2023-11-27 22:36:56 26 4
gpt4 key购买 nike

我正在使用类语法来声明 react 组件:

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 = doBthis 保留分配给该类。

我尝试搜索解释,但我不知道正确的术语,因此我的搜索词很差。

附注:如果我使用 onChange = doA,我会收到该错误,但输入字段仍会正确更新。所以 this.state.value 正在改变,但它给了我这个错误。这是为什么?

最佳答案

JavaScript 中的箭头函数按词法为您绑定(bind) this。这就是 doB 可以正常工作而 doA 不能正常工作的原因。

如果您在构造函数中绑定(bind)doA,则使用类语法将按预期工作:

constructor(props) {
super(props);
this.doA = this.doA.bind(this);
}

关于javascript - React javascript 中这两个声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com