Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 设置阵列上的状态不在react native模式下工作?_Javascript_Arrays_Reactjs_React Native - Fatal编程技术网

Javascript 设置阵列上的状态不在react native模式下工作?

Javascript 设置阵列上的状态不在react native模式下工作?,javascript,arrays,reactjs,react-native,Javascript,Arrays,Reactjs,React Native,我真的很抱歉,因为这听起来很疯狂。 我得到了一个方法来验证模态中表单中的一些输入 因此,我检查每个this.state.variable并将其推送到aux数组,然后将其设置为原始fieldErrors数组 但由于某些原因,当我在设置前检查aux时,长度为5。 设置为fieldErrors后,我注意到长度为0。发生什么事了 代码如下: _validateMissingFields: function() { var aux = []; if (this.state.variabl

我真的很抱歉,因为这听起来很疯狂。 我得到了一个方法来验证模态中表单中的一些输入

因此,我检查每个this.state.variable并将其推送到aux数组,然后将其设置为原始fieldErrors数组

但由于某些原因,当我在设置前检查
aux
时,长度为5。 设置为fieldErrors后,我注意到长度为0。发生什么事了

代码如下:

_validateMissingFields: function() {
    var aux = [];

    if (this.state.variable1.length === 0) {
        aux.push('variable1');
    }

    if (this.state.variable2.length === 0) {
        aux.push('variable2');
    }

    if (this.state.variable3.length === 0) {
        aux.push('variable3');
    }

    if (this.state.variable4.length === 0) {
        aux.push('variable4');
    }

    if (this.state.variable5.length === 0) {
        aux.push('variable5');
    }

    console.log(aux.length) // -> shows 5
    this.setState({ fieldErrors: aux });
}
稍后,当我在这个方法之后执行
this.state.fieldErrors.length时,显示0

顺便说一下,这就是我初始化
fieldErrors
的方式:

getInitialState: function() {
    return {
        variable1: '',
        variable2: '',
        variable3: '',
        variable4: '',
        variable5: '',
        fieldErrors: []
    }
},

React setState是异步的,因此无法立即读取此.state


有关更多信息,请参见文档

setState是异步的,正如前面几次提到的,但它也接受回调函数作为第二个参数,因此如果您尝试在回调中处理长度,您可以执行以下操作

this.setState({ fieldErrors: aux }, () => {
  console.log(this.state.fieldErrors.length); // Or whatever you're trying to do
};

可能是重复的,请查看此问题以获取更多信息Omg@jontro,不知道它是异步的:S这有点难看,我认为它将是一个即时设置,就像在任何其他框架中一样。谢谢把它作为一个答案,我会勾选它。这个框架充满了异步的东西,令人讨厌:'(很多承诺和东西同时发生,哈哈..让我发疯了!;)是的,需要一段时间才能习惯。设置好状态后,我并不经常需要阅读状态,虽然是在同一个pass中。谢谢,你也对,但我给jontro打勾,因为他首先帮助了我:)谢谢tho!