2016-11-19 8 views
0

私は今いくつかの提案された解決策がありますが、それらを動作させることはできません。古いアレイのコピーを正しく作成することによってリストビューを更新する際に問題があります。 これまで(:-(作業をdoesntのある)リストビューを再描画いけない私のソリューションリストアをリアクションネイティブで

const data = [{ 
      id: 1, 
      selected: true, 
     }, { 
      id: 2, 
      selected: false, 
     }, { 
      id: 3, 
      selected: false, 
     }] 

     const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 

     this.state = { 
      dataSource: ds.cloneWithRows(data), 
      data: data, 
     } 

私はこのコードを使用した行を更新するには:。

_updateRow = (rowData, rowID) => { 
    let newArray = this.state.data.slice(); 

    newArray.map((o, index) => { 
     if (o.id = rowData.id){ 
      o.selected = true; 
     } 
     else { 
      o.selected = false; 
     } 
    }) 


    this.setState({ 
     dataSource: this.state.dataSource.cloneWithRows(newArray), 
     data: newArray 
    }) 
} 

を私は(選択)プロパティを変更したいです真のインデックスとfalseに他のすべてのオブジェクト(選択)から。 ホープ誰かがクリーンな解決策を探しています。助けることができる。

よろしく

+1

o.id = rowData.idまたはo.id == rowData.id? –

+0

o.id == rowData.id ofcourse :-) – MDK

答えて

2

ね! 解決しました。

_updateRow = (rowData, rowID) => { 
    let newArray = this.state.data.slice(); 

    newArray.map((o, index) => { 
      newArray[index] = {...o, selected: true}; 
     else 
      newArray[index] = {...o, selected: false}; 

    }) 

    this.setState({ 
     dataSource: this.state.dataSource.cloneWithRows(newArray), 
     data: newArray 
    }) 
} 

よりよい解決策を持つ任意の1: はここにコードされていますか?

0

おそらく以下のコードですか?

_updateRow = (rowData) => { 
 
    let newArray = [].concat(this.state.data); 
 

 
    newArray.map((o, index) => { 
 
     return {...o, selected: o.id === rowData.id} 
 
    }); 
 

 
    this.setState({ 
 
     dataSource: this.state.dataSource.cloneWithRows(newArray), 
 
     data: newArray 
 
    }) 
 
}

関連する問題