开发者问题收集

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() 函数使用一些 propsstate 时,这样使用是一个好习惯。

    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