2017-12-02 6 views
1

私は、次の機能があります:私はourItemsが本当に何をやっていると仮定されていないことを実現しますが、それらの三行が追加された理由をするときなぜキー値のペアが状態に2回追加されるのですか?

handleAddItem(s) { 

    var key = Object.keys(s)[0]; 
    var value = s[key]; 

    var allItems = {...this.state.items};  

     allItems[key] = allItems[key]; 
     allItems[key].push({name: value}); 


    var ourItems = {}; 
     ourItems = allItems[key]; 
     ourItems.push({name: value });   


    this.setState({items: allItems}); 

} 

は状態に二度追加されているキーと値のペアですか?

答えて

1

JavaScriptのプリミティブのみが値渡しされます。他のすべては参照によって渡されます。 ourItems = allItems[key]を設定すると、の可変ポイントがallItems[key]の配列になります。配列はコピーされません。そのため、実際にはオブジェクトを同じ配列に2回プッシュします。

+0

このように状態を設定できますか? – DCR

関連する問題