如何使用componentDidMount重置状态?

卡米

我是React的新手,正在做测验。我现在想做的就是在遇到新问题时将类名重置为初始状态。我想我想使用componentDidUpdate,但不确定如何工作。

  componentDidUpdate() {
    this.setState({
      classNames: ["", "", "", ""]
    });
  }

这是完整的组件代码:

class Answers extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isAnswered: false,
      classNames: ["", "", "", ""]
    };

    this.checkAnswer = this.checkAnswer.bind(this);
  }

  checkAnswer(e) {
    let { isAnswered } = this.props;

    if (!isAnswered) {
      let elem = e.currentTarget;
      let { correct, increaseScore } = this.props;
      let answer = Number(elem.dataset.id);
      let updatedClassNames = this.state.classNames;

      if (answer === correct) {
        updatedClassNames[answer - 1] = "right";
        increaseScore();
      } else {
        updatedClassNames[answer - 1] = "wrong";
      }

      this.setState({
        classNames: updatedClassNames
      });

      this.props.showButton();
    }
  }

  componentDidUpdate() {
    this.setState({
      classNames: ["", "", "", ""]
    });
  }

  render() {
    let { answers } = this.props;
    let { classNames } = this.state;

    return (
      <div id="answers">
        <ul>
          <li onClick={this.checkAnswer} className={classNames[0]} data-id="1">
            <p>{answers[0]}</p>
          </li>
          <li onClick={this.checkAnswer} className={classNames[1]} data-id="2">
            <p>{answers[1]}</p>
          </li>
          <li onClick={this.checkAnswer} className={classNames[2]} data-id="3">
            <p>{answers[2]}</p>
          </li>
          <li onClick={this.checkAnswer} className={classNames[3]} data-id="4">
            <p>{answers[3]}</p>
          </li>
        </ul>
      </div>
    );
  }
}

export default Answers;

任何帮助表示赞赏!自从我正在学习以来,对整个代码项目的反馈也非常感谢。

以下是完整项目的链接:

https://codesandbox.io/s/another-quiz-mfmop

Yuan-Hao Chiang

有一个简单的解决方法(建议将其作为React的最佳实践),如果您更改key了答案,可以运行演示:https : //codesandbox.io/s/another-quiz-wgycs

<Answers
  key={question}    // <-- oh hi
  answers={answers}
  correct={correct}
  ...

理想情况下,您将使用id,并且由于大多数现代数据结构都具有id,因此key={question_id},由于密钥必须是唯一的,因此非常适合使用

{
    id: 1
    question: 'What does CSS stand for?',
    answers: [...],
    correct: 3
},
{
    id: 2,
     ....
}

如果没有,则必须使用prevProps

componentDidUpdate(prevProps) {
  if (this.props.question !== prevProps.question) {
    this.setState(....)
  }
}

我真的推荐这种key方法,因为这将强制创建新的组件,实际上,如果您需要继续检查更改的道具,那么跟踪变得有些困难。

请记住,理想情况下应该有一个id,因为如果问题文本相同,它将导致讨厌的难以发现的错误。

此外,与其保存类名,不如保存selected为索引并在render方法上选择正确的类名,这更好

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何从componentDidMount(使用Redux)获取状态?

来自分类Dev

从@ reduxjs / toolkit使用configureStore时如何重置Redux Store的状态?

来自分类Dev

Swiftui:如何重置布尔状态?

来自分类Dev

如何重置反应钩子状态?

来自分类Dev

使用createSlice部分重置状态

来自分类Dev

我无法使用componentDidMount中的设置状态来更改状态

来自分类Dev

如何重置ngrx / store的所有状态?

来自分类Dev

如何在Grafana中重置“警报”状态

来自分类Dev

如何在useEffect中使用setTimeout重置React挂钩状态

来自分类Dev

如何将状态重置为其初始状态?

来自分类Dev

如何通过ComponentDidMount()中调用的函数访问状态集

来自分类Dev

在 componentDidMount 中使用 get 请求后,状态最初为 null

来自分类Dev

当用户使用React Native otp输入从otp文本输入中删除文本时,如何添加重置状态?

来自分类Dev

使用 gtk_css_provider_load_from_data() 后如何将小部件的背景颜色重置为默认状态

来自分类Dev

如何使用git重置仓库?

来自分类Dev

如何使用jQuery重置CSS?

来自分类Dev

如何使用git重置仓库?

来自分类Dev

如何使用Powershell重置netmon?

来自分类Dev

StatusLabel-如何重置或允许状态文本超时或消失

来自分类Dev

如何将openshift部署重置为新状态?

来自分类Dev

如何重置App Engine的appcfg身份验证状态?

来自分类Dev

如何在两次测试之间重置Realm的状态?

来自分类Dev

如何完全重置画布上下文状态

来自分类Dev

单元测试C时如何重置状态机

来自分类Dev

如何在给定的git commit之前重置到状态?

来自分类Dev

如何重置Kendo MVVM单选按钮的选中状态?

来自分类Dev

如何将Android布局重置为默认状态?

来自分类Dev

如何在React Navigation v5中重置状态?

来自分类Dev

如何在React Native中重置状态值?

Related 相关文章

  1. 1

    如何从componentDidMount(使用Redux)获取状态?

  2. 2

    从@ reduxjs / toolkit使用configureStore时如何重置Redux Store的状态?

  3. 3

    Swiftui:如何重置布尔状态?

  4. 4

    如何重置反应钩子状态?

  5. 5

    使用createSlice部分重置状态

  6. 6

    我无法使用componentDidMount中的设置状态来更改状态

  7. 7

    如何重置ngrx / store的所有状态?

  8. 8

    如何在Grafana中重置“警报”状态

  9. 9

    如何在useEffect中使用setTimeout重置React挂钩状态

  10. 10

    如何将状态重置为其初始状态?

  11. 11

    如何通过ComponentDidMount()中调用的函数访问状态集

  12. 12

    在 componentDidMount 中使用 get 请求后,状态最初为 null

  13. 13

    当用户使用React Native otp输入从otp文本输入中删除文本时,如何添加重置状态?

  14. 14

    使用 gtk_css_provider_load_from_data() 后如何将小部件的背景颜色重置为默认状态

  15. 15

    如何使用git重置仓库?

  16. 16

    如何使用jQuery重置CSS?

  17. 17

    如何使用git重置仓库?

  18. 18

    如何使用Powershell重置netmon?

  19. 19

    StatusLabel-如何重置或允许状态文本超时或消失

  20. 20

    如何将openshift部署重置为新状态?

  21. 21

    如何重置App Engine的appcfg身份验证状态?

  22. 22

    如何在两次测试之间重置Realm的状态?

  23. 23

    如何完全重置画布上下文状态

  24. 24

    单元测试C时如何重置状态机

  25. 25

    如何在给定的git commit之前重置到状态?

  26. 26

    如何重置Kendo MVVM单选按钮的选中状态?

  27. 27

    如何将Android布局重置为默认状态?

  28. 28

    如何在React Navigation v5中重置状态?

  29. 29

    如何在React Native中重置状态值?

热门标签

归档