当前位置: 首页 > 面试题库 >

ReactJS onClick状态改变落后一步

傅浩漫
2023-03-14
问题内容

我正在使用ReactJS构建一个非常原始的测验应用程序,但无法更新Questions组件的状态。它的行为是,questions尽管在以下方面this.state.questionNumber始终落后一步,但它仍为DOM提供了正确的数组索引handleContinue()

import React from "react"

export default class Questions extends React.Component {
  constructor() {
    super()
    this.state = {
      questionNumber: 1
    }
  }

  //when Continue button is clicked
  handleContinue() {
    if (this.state.questionNumber > 3) {
      this.props.unMount()
    } else {
      this.setState({
        questionNumber: this.state.questionNumber + 1
      })
      this.props.changeHeader("Question " + this.state.questionNumber)
    }
  }

  render() {
    const questions = ["blargh?", "blah blah blah?", "how many dogs?"]
    return (
      <div class="container-fluid text-center">
        <h1>{questions[this.state.questionNumber - 1]}</h1>
        <button type="button" class="btn btn-primary" onClick={this.handleContinue.bind(this)}>Continue</button>
      </div>
    )
  }
}

问题答案:

setState()是不必是同步操作:

setState()不会立即变异,this.state但会创建待处理的状态转换。this.state向后进入

无法保证对呼叫的同步操作,setState并且可以为提高性能而对呼叫进行批量处理。

因此,this.state.questionNumber此处可能仍保留先前的值:

this.props.changeHeader("Question " + this.state.questionNumber)

相反,请 使用 状态转换完成后调用的回调函数

this.setState({
    questionNumber: this.state.questionNumber + 1
}, () => {
    this.props.changeHeader("Question " + this.state.questionNumber)
})


 类似资料:
  • 我试图使用React Hooks来管理一个简单的文本输入字段和提交输入按钮的状态。输入字段不断验证(现在只是检查长度 我已将参数扩展为setMuffinSettings,以显式返回一个对象,并已确认此返回对象的顺序为:true。因此,问题与setMuffinSettings本身有关,而不是传递给setMuffinSettings的对象不正确。 我还研究了另外两个与React挂钩(特别是挂钩)和“落

  • 我在React中有各种各样的函数,其中我需要使用useState更改状态,然后根据新状态是否满足某些条件执行一些操作。 当使用prop=“newpassword”调用handleChange时,它使用useState中的setValues方法设置newpassword的值。然后使用正则表达式测试对新密码进行评估,如果它有效,则状态变量passwordIsValid应设置为true。 状态总是比th

  • 问题内容: 我正在从表单组件获取数据,并尝试使用此数据设置应用程序组件的状态。 但是,state.data是一个空对象,不会更新数据。在设置模型数据是否存在之前,我会控制台记录模型数据。他们是模型中的数据。 问题答案: 是React中的异步调用。因此,您不太可能在下一行获得更新的状态值。要在状态更新成功后检查更新后的值,可以签入回调处理程序。 改变这个 至

  • 我得到这个错误,而试图改变阿波罗本地状态。 错误不变冲突:应为已解析的GraphQL文档。也许您需要将查询字符串包装在“gql”标记中?http://docs.apollostack.com/apollo-client/core.html#gql 初始状态 我的突变 我的解析器 我想改变按键的局部状态,功能是 生成数据功能如下 我是阿波罗客户的新手。我不明白我做错了什么。有人能帮我解决这个问题吗?

  • 本文向大家介绍AngularJS改变元素显示状态,包括了AngularJS改变元素显示状态的使用技巧和注意事项,需要的朋友参考一下 前言 本文描述使用AngularJS提供的ng-show和ng-hide指令实现自动监听某布尔型变量来改变元素显示状态。 控制html元素显示和隐藏有n种方法:html的hidden、css的display、jQuery的hide()和show()、bootstrap

  • 本文向大家介绍bootstrap改变按钮加载状态,包括了bootstrap改变按钮加载状态的使用技巧和注意事项,需要的朋友参考一下 bootstrap里面有个激活按钮的时候,按钮变成不可用的; 按照官网里面的方法介绍是在button按钮加个 data-loading-text="Loading..." 属性,然后js总体代码是这样: 其中autocomplete="off"属性是针对FF浏览器在页