2015-10-21 2 views
1

Я пытаюсь повторно визуализировать ListView при изменении данных (т. Е. Путем поиска или какого-либо другого события).Повторный рендеринг ListView

Первоначально состояние выглядит примерно так:

let source = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}) 
 

 
return { 
 
    source: source, 
 
    loading: false 
 
}

Когда я получить обновленные данные, я пытаюсь обновить состояние, как это:

let data = this.state.source.cloneWithRows([]) 
 
this.setState({ source: data })

Это пустой массив в этом примере. Повторная обработка запускается, но ListView не изменяется вообще. Элементы точно такие же.

Я просмотрел документацию, посмотрел на какой-то код и попробовал несколько подходов. До сих пор ничего не работало. Есть что-то, что мне не хватает?

ответ

1

Проблема в том, что вы переписываете объект dataSource с данными в свой. Я не уверен, что ваш источник данных в ListView. new ListView.DataSource не обязательно должно быть состояние. Вы можете попробовать следующий код

начальную

this.dataSource = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}) 
var source = this.dataSource.cloneWithRows(<initial source>) 
this.setState({source}) // equivalent of this.setState({source : source}) 

Следующее обновление

var source = this.dataSource.cloneWithRows([]) 
this.setState({source}) // equivalent of this.setState({source : source}) 

ListView компонента

<ListView 
dataSource = {this.state.source} 
... // other properties 
/> 
+0

Спасибо, я постараюсь это сейчас. – usernames

Смежные вопросы