Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 状态更新不正确_Javascript_Reactjs - Fatal编程技术网

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
?是的,我想我可以做到这一点,我将在循环后构建消息,我将flag
isInvalid
置于输入状态。谢谢你的指导。你能写下你的评论作为答案,我会记下它吗?@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
        });            
    }