【问题标题】:Set State on array not working in react native?在数组上设置状态在本机反应中不起作用?
【发布时间】:2017-10-11 04:00:39
【问题描述】:

我真的很抱歉我发布了这个,因为它听起来很疯狂。 我有一种方法可以验证我在模态框内的表单中的一些输入。

所以我检查每个 this.state.variable 并推送到一个辅助数组,然后将其设置为原始 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: []
    }
},

【问题讨论】:

  • 查看此问题以获取更多信息stackoverflow.com/questions/30782948/…
  • Omg @jontro,不知道它是 async :S 有点难看,我认为它会像在任何其他框架中一样即时设置。谢谢!把它作为答案,我会打勾。
  • 这个框架充满了令人讨厌的异步东西:'(很多承诺和东西同时发生哈哈..快把我逼疯了!
  • ;) 是的,需要一段时间才能习惯。尽管在同一通道中设置状态后,我并不经常需要读取状态

标签: javascript arrays reactjs react-native


【解决方案1】:

React setState 是异步的,这就是为什么 this.state 不能立即读取的原因。

有关更多信息,请参阅文档https://facebook.github.io/react/docs/react-component.html#setstate

【讨论】:

    【解决方案2】:

    setState 是异步的,正如已经提到过几次,但它也接受一个回调函数作为第二个参数,所以如果你想要对长度做的事情可以在回调中完成,你可以做类似的事情

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

    【讨论】:

    • 谢谢,你也是对的,但我给 jontro 打勾,因为他首先帮助了我 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2020-01-24
    • 2022-01-06
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多