TypeError:无法读取未定义的属性“state”。但是 state 可以成功 console.logged (REACT)
2020-03-05
53
我有一个组件,我正在尝试为其创建状态。此状态可以成功记录/警报,但在我的 return 语句中使用时不起作用。
这是组件。不起作用的状态是 viewMoreToken。它正在 map 函数中使用。
class DisplayWSAAnsweredQuestions extends React.Component {
constructor(props) {
super(props);
this.state = {
viewMoreToken: false
};
}
render() {
alert(this.state.viewMoreToken);
return (
<>
{this.props.answeredQuestions &&
this.props.answeredQuestions.map(function(question, index) {
if (!this.state.viewMoreToken) {
if (
question.QuestionResponse === "Y" ||
question.QuestionResponse === "N"
) {
return (
<>
<div
style={{
backgroundColor: "#E6E6E6",
padding: "1px"
}}
>
<ul>
{" "}
<b> Q :</b>
<div style={{ float: "right" }}>✔️</div>
{question.QuestionWhenAnswered}
</ul>
</div>
</>
);
} else if (question.QuestionResponse === "P") {
return (
<>
<div
style={{
backgroundColor: "#BDBDBD",
padding: "1px"
}}
>
<ul>
<b> Q :</b>
{question.QuestionWhenAnswered}{" "}
<div style={{ float: "right" }}>❌</div>
{/* <br />
<b> S :</b>
{question.SuggestedSoloution} */}
</ul>
</div>
</>
);
}
} else {
return <>Nice </>;
}
})}
</>
);
}
}
这是错误消息。
TypeError: Cannot read property 'state' of undefined
为什么在使用警报时它显示它被设置为 false 正常,但一旦在 .map 函数中的 if 语句中使用,它就会说它未定义。
任何建议都非常感谢。
2个回答
问题是你的 map 函数没有绑定到外部 this 范围。
使用箭头函数
this.props.answeredQuestions.map( (question, index) => {
//rest of the code
});
joy08
2020-03-05
每次当你的 render() 函数使用一些
props
或
state
时,这样使用是一个好习惯。
const { answeredQuestions, ... } = this.props;
const { viewMoreToken, ... } = this.state;
为了避免
this
区域问题,示例如下:
render() {
const { answeredQuestions } = this.props;
const { viewMoreToken } = this.state;
alert(viewMoreToken);
return (
<>
{answeredQuestions &&
answeredQuestions.map(function(question, index) {
if (!viewMoreToken) {
if (
这样,你可以在你的
render()
函数中同时使用
普通函数
和
箭头函数
,以及其他作用域
{}
,无需考虑。
keikai
2020-03-05