2017-08-23 10 views
1

私はReactJSの初心者です。これは私のコードです。setStateが期待どおりに更新されない

for (var key in getContentState){ 
    var string=getContentState[key] 
    if(highlighted_cols.includes(Object.keys(string).toString())){ 
     arr=Object.values(string) 
     this.setState({ 
      uniqueValues : arr 
     },()=>{ 
      console.log("update") 
      console.log(this.state.uniqueValues) 
     }) 
    } 
} 

getContentStateは、私は毎回uniqueValuesを更新しようとしているキーはhighlighted_colsと一致している screenshot of getContentState

のように見えるオブジェクトです。 highlighted_colsは、ユーザーによって選択されます。この場合、getContentStateに表示されるように、種または農家のいずれかが選択されます。

ユーザーが1つの列(種または農家)のみを選択しても問題ありません。しかし、ユーザーが複数の列(種や農家)を選択すると、農家専用の値が表示されます。

答えて

1

に役立ちます。状態を更新しようとしました?以下のような

何か:

let result = [] 
for (var key in getContentState) { 
    var string = getContentState[key] 

    if (highlighted_cols.includes(Object.keys(string).toString())) { 
    result = [ 
     ...result, 
     Object.values(string), 
    ] 
    // or result.push(Object.values(string)) 
} 

this.setState({ 
    uniqueValues : result 
},() => { 
    console.log('update') 
    console.log(this.state.uniqueValues) 
}) 
+0

はそれの作業例を参照するとよいでしょう。しかし、OPはforループの中に状態を設定すべきではないので、これは正しいと思われる。 forループを通過するたびに、そこにあったデータが消去されます。 –

+0

私はあなたのソリューションを使用して問題を解決しました!これは.pushを使用しており、forループからsetStateを移動しています。ありがとう! –

0

反応が最適化されているか、またはレンダリングが完了する前に状態が変更され、終了状態に最初の値が含まれていないと考えられます。 forループ内でsetState()を呼び出すべきではありません。

状態を更新する新しいオブジェクトを準備してから、forループの終了後にsetState()を呼び出すことをお勧めします。

希望これはあなたがforループ内の状態を更新することにより、状態(uniqueValues)キーをオーバーライドしているように見えます

関連する問題