【发布时间】:2020-09-25 13:27:16
【问题描述】:
我想了解当在 JSX 中调用函数作为 eventHandler 的回调时,'this' 的值是如何设置的。我注意到,当我直接调用它时,访问状态不会出现著名的未定义“this”错误,如下所示:
import React from "react";
class Accordion extends React.Component {
state = { term: "random term" };
onTitleClick() {
console.log("Title is clicked");
console.log(this.state.term);
}
render() {
const renderedItems = this.props.items.map((item) => {
return (
<React.Fragment key={item.title}>
<div className="title active" onClick={this.onTitleClick()}>
<i className="dropdown icon"></i>
{item.title}
</div>
<div className="content active">
<p>{item.content}</p>
</div>
</React.Fragment>
);
});
return <div className="ui styled accordion">{renderedItems}</div>;
}
}
export default Accordion;
当您将它作为参考传递时,著名的 'this' is undefined 错误又回来了。然后我们知道如何绑定'this'等等。我觉得我只是记住了解决方案,现在想了解其中的区别。
【问题讨论】:
-
在 JavaScript 中,
this的默认行为是它引用调用它的上下文。在您的代码中onClick={this.onTitleClick()}意味着onTitleClick()函数在声明state.term的同一上下文中执行;函数声明中的this与函数执行时的this相同(即Accordion类)。 [...继续...] -
当您将处理程序作为引用传递给子组件时,函数声明中的
this一直引用Accordion类,而执行期间的this引用子组件...但子组件不包含state.term,因此出现错误。
标签: javascript reactjs this