2016-07-15 38 views
2

如何添加新項子陣列由setStateReactJS的setState多個嵌套arrays-如何添加新的對象爲子陣列

getInitialState : function(){ 
      return { 
       Todo:[ 
      { 
       name:"parimary", 
       items:[ 
       {item:'Todo itmd #1',isDone:false}, 
       {item:'Todo itmd #2',isDone:true} 
       ] 
      },{ 
       name:"Secondary", 
       items:[ 
       {item:'Todo itmd #1',isDone:false}, 
       {item:'Todo itmd #2',isDone:true}, 
       {item:'Todo itmd #3',isDone:true} 
      ]}],selectedItem:"0"}; 

     }, 


InsertItems : function(newItem){ 
      var item = {item:newItem,isDone:false}; 
      var allItems = this.state.Todo[this.state.selectedItem].items.concat([item]); 
      this.setState({ 
       Todo: {[this.state.selectedItem]:{items:{ 
      $set: allItems 
      }}} 
      }); 

     }, 

我跑後,我只是得到一個錯誤

Uncaught TypeError: allitems.map is not a function.

如何將一個新對象添加到子數組中?

回答

0

所有你需要安裝的反應本地插件更新的第一:

$ npm i --save react-addons-update 

低於進口這裏面你組件:

import update from 'react-addons-update'; 

,比使用下面的代碼你InsertItems內函數更新您的嵌套數組:

InsertItems : function(newItem){ 
    const item = {item: newItem, isDone: false}; 

    const index = this.state.selectedItem; 

    const allItems = this.state.Todo[index].items.concat([item]); 

    let newTodo = update(this.state.Todo, { 
     [index]: { 
      $set: { 
       ...this.state.Todo[index], 
       items: allItems 
      } 
     } 
    }); 

    this.setState({Todo: newTodo}); 
} 
相關問題