Javascript 状态更新不正确
我有一个简单的代码用于验证我在状态中的输入:Javascript 状态更新不正确,javascript,reactjs,Javascript,Reactjs,我有一个简单的代码用于验证我在状态中的输入: validateForm2: function () { var formIsValid = true; for (var i = 0; i < this.state.inputs.length; i++) { var currentInput = this.state.inputs[i]; var inputValue = this.state[currentIn
validateForm2: function () {
var formIsValid = true;
for (var i = 0; i < this.state.inputs.length; i++) {
var currentInput = this.state.inputs[i];
var inputValue = this.state[currentInput.name];
if (!currentInput.validate(inputValue)) {
formIsValid = false;
this.makeInvalid(currentInput.name);
}
}
return formIsValid;
},
这是一条showValidtionMessage
:
showValidationError: function (message) {
var summary = this.state.validationSummary + message;
this.setState({
validationSummary: summary
});
}
当我有两个错误时,showValidationError
被调用两次,并且在调试器中,我看到有两条不同的消息到达函数,但是validationSummary
只有一条消息(第二条)。我不知道为什么。另外,我尝试在setState
之后编写console.log(this.state.validationSummary)
,在控制台中,我在第一次调用后得到空字符串。哪里有错误
另外,我已经阅读了文档,并且有人写道
setState()
不会立即改变this.state
,而是创建一个挂起的状态转换。这可能是原因吗?如果是这样,如何重写我的代码?是的,如果在同一个勾号内调用setState
两次,所有数据都将合并<代码>此。状态仅在勾选结束时更新。您知道如何重写此项吗?我不知道setInterval
不是个好主意,我想:)只需在validateForm2
中构建完整的错误消息,并在循环后调用setState
?是的,我想我可以做到这一点,我将在循环后构建消息,我将flagisInvalid
置于输入状态。谢谢你的指导。你能写下你的评论作为答案,我会记下它吗?@FelixKling:还有一个问题,你写道所有数据都将被合并。这是否意味着,如果在一次勾选中,我会像这样更新状态:this.setState({text:this.state.text+'text1');this.setState({this.state.text+'text2'})
我是否会在勾号结束时得到text1text2
?
showValidationError: function (message) {
var summary = this.state.validationSummary + message;
this.setState({
validationSummary: summary
});
}