import React from "react"
export default class Questions extends React.Component {
constructor(props) {
super(props)
this.state = {
questionNumber: 1,
userAnswers: [],
value: ''
}
this.handleContinue = this.handleContinue.bind(this)
this.handleChange = this.handleChange.bind(this)
}
//when Continue button is clicked
handleContinue() {
this.setState({
//this push function throws error on 2nd go round
userAnswers: this.state.userAnswers.push(this.state.value),
questionNumber: this.state.questionNumber + 1
//callback function for synchronicity
}, () => {
if (this.state.questionNumber > 3) {
this.props.changeHeader(this.state.userAnswers.toString())
this.props.unMount()
} else {
this.props.changeHeader("Question " + this.state.questionNumber)
}
})
console.log(this.state.userAnswers)
}
handleChange(event) {
this.setState({
value: event.target.value
})
}
render() {
const questions = [
"Blargh?",
"blah blah blah?",
"how many dogs?"
]
return (
<div class="container-fluid text-center">
<h1>{questions[this.state.questionNumber - 1]}</h1>
<div class="radio">
<label class="radio-inline">
<input type="radio" class="form-control" name="trueFalse" value="true"
onChange={this.handleChange}/>True
</label><br/><br/>
<label class="radio-inline">
<input type="radio" class="form-control" name="trueFalse" value="false"
onChange={this.handleChange}/>False
</label>
<hr/>
<button type="button" class="btn btn-primary"
onClick={this.handleContinue}>Continue</button>
</div>
</div>
)
}
}
不要直接修改状态!一般情况下,尽量避免突变。
array.prototype.push()
就地变异数组。因此,本质上,当您push
到setstate
中的数组时,您可以使用push
改变原始状态。由于push
返回新的数组长度而不是实际的数组长度,所以将this.state.useranswers
设置为数值,这就是为什么在第二次运行时得到uncated typeerror:this.state.useranswers.push不是函数(…)
,因为您不能push
设置为数字。
您需要使用array.prototype.concat()。它不会改变原始数组,而是返回一个包含新串联元素的新数组。这就是您希望在setstate
中执行的操作。您的代码应该如下所示:
this.setState({
userAnswers: this.state.userAnswers.concat(this.state.value),
questionNumber: this.state.questionNumber + 1
}
问题内容: 这两个功能之间的主要区别是什么? 为什么用直接更改状态的handleOnChange()函数可以正常工作? 当我使用第一个通过回调更改状态的函数时,出现以下错误: 问题答案: 这是setState的两种不同语法 第一: 使用updater函数作为第一个参数。 第二: 使用要更新的对象 在更新程序功能中使用综合事件时,需要使用 从 文档中 : SyntheticEvent被合并。这意味着
问题内容: 有人可以解释一下为什么 this.setState 不是函数吗? 我不明白为什么我的代码有错误 谢谢 问题答案: 这是问题。使用。
我是JS的初学者。我正在尝试使用 jwt 令牌构建身份验证。 我在系统中有3个用户(角色:管理员,医生 我有一个用于身份验证的中间件,它是auth.js 我试图写另一个将限制路由的(路由/api/admin/me)访问只有管理员。同样是在adminguard.js.(我试图提取角色和检查条件) 请求有关第二个中间件功能的帮助或提出更好的解决方案。 routes/api/systemusers。js
我是React中的一个noob,正在尝试为水相制作一个简单的应用程序,用户输入一个数字,然后根据数值显示水的状态,例如,如果他输入212,它应该是气体,12应该是固体,但由于某些原因,它没有正确显示数值,非常感谢任何帮助!!!
我试图更新的值与中的的值,但它只更改的值,而不更新
当我试图用日期重命名上传的图像时,一个错误被抛出,它显示“无法读取未定义的属性'isLoggedIn'”。 如果有人能解决这个问题,我会很高兴的。首先感谢Multer,我认为它会抛出一个错误,然后转到错误处理中间件。 下面是我的app.js常量path=require('path');