gpt4 book ai didi

javascript - 为什么 "this"在某些情况下绑定(bind)不同,但在 React 中的其他情况下相同?

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

在此组件中,如果不是箭头函数,我无法通过 this.functionName 调用 render 方法中的函数。但是,我能够在箭头函数和常规函数中有效地调用 this.setState。为什么在像这样的 React 组件中“this”在某些情况下不同,但在其他情况下似乎相同?

import React from 'react';

class Address extends React.Component {

state = {
fullAddress: "5001"
}

componentDidMount() {
this.setState({
fullAddress: "hello"
})
}

hello = () => {
this.setState({
fullAddress: "hello1"
})
}

logMessage() {
console.log(this.state.fullAddress);
}

render() {
return (
<div className="address">
{this.state.fullAddress}
<input type="button" value="Log" onClick={this.hello} />
</div>
);
}
}

export default Address;

最佳答案

在您的示例中,logMessage 可能会中断,因为您需要为其指定 this 上下文。

在这种情况下,只需将它绑定(bind)Address的构造函数中,如下所示:

class Address extends Component {
constructor(props) {
super(props)

this.logMessage = this.logMessage.bind(this)
}
}

第二种方法与您已经将 hello 作为箭头函数使用的方法相同。 Arrow functions保留当前上下文 (this),这就是为什么您可以在 hello 的正文中访问 this.setState 的原因。

关于javascript - 为什么 "this"在某些情况下绑定(bind)不同,但在 React 中的其他情况下相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634402/

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