2015-10-30 21 views
7

Kişiler listesini görüntülemek için ListView kullanan bir bileşen oluşturdum. Bir satır tıklandığında, state'un tüm seçili kişileri içeren bileşendeki bir diziyi güncellerim. Ancak, bu diziyi ListView bileşenim için dataSource olarak kullanmıyorum.ThisState değiştiğinde (dataSource değil) ListView kuvvetini yeniden çizme.

Seçilen kişiler için bir görüntüyü görüntülemek için bu dizinin her değiştirilmesinde ListView yeniden çizilmesini istiyorum.

Ben .forceUpdate() aramaya çalıştım
renderListView: function(){ 
    <ListView 
     dataSource={this.state.dataSource} 
     renderRow={this.renderRow} 
     style={styles.listView} 
    /> 
} 
renderRow:function(row){ 
    return if(this.state.something === true) <Text>Something</Text> 
    else <Text>Something Else</Text> 
} 

, bu render yöntemi değil renderRow yöntemini çağırır: Burada

benim şimdiki durumun bir örneğidir.

Herhangi bir öneriniz var mı?

+1

rnplay.org'da oynayabileceğimiz bir şey ayarlayabilir misiniz? –

+0

Sadece bunun karşısına çıktım. iOS ve Android için yenilenebilir çek ile güncellenebilir bir liste görünümü bileşeni olduğunu iddia ediyor. Tatlı görünüyor. Yardımcı olabileceğini düşündüm. https://github.com/FaridSafi/react-native-gifted-listview –

cevap

9

Sadece aynı sorunu yaşadım. Benim soruma bakın: React Native ListView not updating on data change

Temel olarak, ListView bileşeniyle bir hata var gibi görünüyor ve ListView'in yeniden çizilmesi için veri kaynağında değişen her öğeyi yeniden oluşturmanız gerekir.

İşte çalışan bir örnek: https://rnplay.org/apps/GWoFWg

Birincisi, veri kaynağı ve dizinin bir kopyasını oluşturmak ve devlet kaydedin. Benim durumumda, foods dizidir.

constructor(props){ 
    super(props); 
    var ds = new ListView.DataSource({ 
     rowHasChanged: (row1, row2) => row1 !== row2, 
    }); 
    this.state = { 
     dataSource: ds.cloneWithRows(foods), 
     db: foods, 
    }; 
} 

Eğer veri kaynağı birşeyleri değiştirmek Nufusa kaydedilen dizinin bir kopyasını değişimle öğeyi yeniden inşa etmek ve daha sonra (durumuna geri değişiklikle yeni bir dizi kaydetmek istediğinizde hem db ve veri kaynağı).

onCollapse(rowID: number) { 
    console.log("rowID", rowID); 
    var newArray = this.state.db.slice(); 
    newArray[rowID] = { 
     key: newArray[rowID].key, 
     details: newArray[rowID].details, 
     isCollapsed: newArray[rowID].isCollapsed == false ? true : false, 
    }; 
    this.setState({ 
     dataSource: this.state.dataSource.cloneWithRows(newArray), 
     db: newArray, 
    }); 
} 
+0

Daha önce buna rastladım. iOS ve Android için yenilenebilir çek ile güncellenebilir bir liste görünümü bileşeni olduğunu iddia ediyor. Tatlı görünüyor. Yardımcı olabileceğini düşündüm. https://github.com/FaridSafi/react-native-gifted-listview –

İlgili konular