2017-12-21 46 views
1

ループでsetStateを回避するにはどうすればよいですか?私はthis.setState({'some_other_key':123, ...here})動作するようには思えないんこのオブジェクトのsetState配列

const here = [{a: 'abc'},{b: 'xyz'}]

を持っています。

+0

通常、オブジェクト全体ではなく、変更したいキーだけを設定します。典型的な例はthis.setState({some_other_key:2}) – cdoshi

答えて

1

あなただけが他のものを変更しないことを望むので、あなただけの

this.setState({'some_other_key':123}) 

setStateがマージを行い、したがって、キーが存在する場合、その値が変化する必要があることをSETSTATEにそれらの要素を提供する必要がありますそれが存在しなければ、新しいものが作成され、他のすべてはそのまま維持されます。

SETSTATE配列にオブジェクトを追加するには、次の

this.setState(prevState => ({ 
    exist: [...prevState.exist, {'some_other_key':123}] 
})) 
+0

です。 'exist variable'を設定する必要があります。おそらく命名は混乱します。 –

+0

名前が変更されました。 –

+0

ジェーン、私はあなたが状態に配列を設定し、それにオブジェクトを追加する必要があることを理解し、私は同じを行う私の答えを更新 –

0

はどこループがある?const exist = {{a: 'abc'},{b: 'xyz'}}

+1

コードのみの回答は元の問題を解決するかもしれませんが、あなたの解決策のいくつかの説明はあなたの答えの一般的な有用性を改善します。 –

0

を試すことができますか ご存知の方 const here = {a:'abc', b:'xyz'} this.setState({'some_other_key':123, ...here})が有効です。

const here = {a: 'abc', b: 'xyz'} が続い{'some_other_key':123, ...here}広がりオペレータは '...' どのように動作するかこれは

{ 'some_other_key': 123, a: 'abc', b: 'xyz' } ある場合const here = [{a: 'abc'},{b: 'xyz'}] が続い{'some_other_key':123, ...here}

{ 'some_other_key': 123, 0: {a: 'abc'}, 1: {b: 'xyz'} }

ある場合。