【发布时间】:2015-12-01 05:06:55
【问题描述】:
我像更新组件的状态
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(),但没用。
我的 react-native 版本是 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 本身分配为 null 或空数组到 clonewithrows
标签: android react-native