2017-05-12 8 views
1

本当に申し訳ありませんが、狂ったように私はこれを投稿しています。 私は、モーダル内のフォームにあるいくつかの入力を検証する方法を得ました。配列の状態を反応ネイティブでは機能しませんか?

したがって、私はthis.state.variableをチェックし、元のfieldErrors配列に設定されるようにaux配列にプッシュします。

しかし、いくつかの理由で、私は設定する前にauxをチェックしたときに、長さがfieldErrorsに設定した後5 であるため、私は、長さは何が起こっている0です気づきますか?ここで

コードです:私は、このメソッドの後 this.state.fieldErrors.lengthを行う際に、後で

_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 }); 
} 

ちなみに0

を示し、これは私がfieldErrorsを初期化しています方法です:

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

可能な重複http://stackoverflow.com/questions/36085726/setstate-in-reactjs-is-asyncような何かを行うことができます - または - 同期) – jontro

+1

詳細については、この質問を参照してくださいhttp://stackoverflow.com/questions/30782948/why-calling-react-setstate-method-doesnt-mut ate-the-state-immediately – jontro

+0

Omg @jontroは、それが非同期であることを知らなかった:Sそれはちょっと醜いです、私はそれが他のフレームワークのようにインスタントセットになると思いました。ありがとう!答えとして入れて、私はそれに目を向けるでしょう。 – msqar

答えて

1

SETSTATEは、非同期ですが、長さが缶に何をしようとしてので、もしそれがまた、2番目のパラメータとしてコールバック関数を受け入れ、詳細はドキュメントを参照してください。コールバックで行われますが

this.setState({ fieldErrors: aux },() => { 
    console.log(this.state.fieldErrors.length); // Or whatever you're trying to do 
}; 
([reactjsでSETSTATEが非同期または同期である]の
+0

ありがとう、あなたも右ですが、彼は私が最初に助けて以来、jontroにティックを与える:)ありがとうtho! – msqar

関連する問題