I обновления состояния компонента, какРеагировать Native ListView не обновляет, когда очищается DataSource
if (!this.state.filtered) {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(allData),
filtered: false,
});
} else {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(filteredData),
filtered: true,
});
}
это отлично работает, когда filteredData
не пусто. но когда filteredData
является пустым массивом, ListView не обновляется после setState
(функция renderRow()
и rowHasChanged()
не вызывается также.).
Я пробовал звонить listView.forceUpdate()
, но бесполезно. моей реакции родной версии 0.14.0 и работает на Android 5,0
=== обновление ===
После вызова setState()
, используя console.log(this.state.dataSource)
результатов является
{
_rowHasChanged: [Function],
_getRowData: [Function: defaultGetRowData],
_sectionHeaderHasChanged: [Function],
_getSectionHeaderData: [Function: defaultGetSectionHeaderData],
_dataBlob: { s1: [] },
_dirtyRows: [ [] ],
_dirtySections: [ true ],
_cachedRowCount: 0,
rowIdentities: [ [] ],
sectionIdentities: [ 's1' ]
}
В моем случае, структура переменная allData
как это:
var allData = [[{id:1, name:'tom'},{id:2, name:'jerry'}], [...], [...]];
и filteredData
просто пустой массив var filteredData = [];
я изменил filteredData
к var filteredData = [[null]]
и ListView может быть оказана правильно, не знаю почему, он просто работает :(
clonewithRows всегда будет принимать входные данные как массив поэтому убедитесь, что вы назначаете сам DataSource утратившим или пустой массив в clonewithrows –