【发布时间】:2017-11-09 04:20:57
【问题描述】:
我在使用 FlatList 时遇到了两个问题(两者都与 ListView 一起使用)。
我有一个通过每个项目的显示属性显示的列表,然后像这样签入我的 FlatList:
<FlatList
ref='flatList'
data={this.state.dataSource}
enableEmptySections
renderItem={({item}) => item.display && <Text>{item.text}</Text>} />
当我更改显示属性时,它不会显示。这在 ListView 设置中运行良好。
我的第二个问题是 scrollToEnd 在 scrollToEnd 函数内的“this._listref”上触发了一个未定义的错误。我没有向它传递任何参数。
setTimeout(this.refs.flatList.scrollToEnd, 0)
我的问题是,如何更新列表的数组中的数据,使其在列表中发生变化,第二个问题是如何修复 scrollToEnd 错误?
更新 1:(数据已删除,不再需要)
更新 2: 问题 ONE 已解决,列表需要“extraData”比较以查看是否更新。固定版:
<FlatList
ref='flatList'
data={this.state.dataSource}
extraData={this.state}
enableEmptySections
renderItem={({item}) => item.display && <Text>{item.text}</Text>} />
这有点令人费解,但我相信 extraData 可以作为比较来查看该数据集中是否有任何更新。如果是这样,请重新渲染。这个问题就解决了。
“undefined is not an object (evalating 'this._listRef')”仍未修复
更新 3:如果在 setTimeout 函数之外使用,则滚动功能有效
更新 4:
设置初始数据数组
this.state = {
dataSource: pageService(state.params.page),
cursor: 0
}
设置显示为真:
renderNextModule() {
let newCursor = this.state.cursor
if (newCursor < this.state.dataSource.length-1) {
newCursor++
let newSource = this.state.dataSource
newSource[newCursor].display = true
this.setState({
dataSource: newSource,
cursor: newCursor
})
}
}
【问题讨论】:
-
FlatList 中的浅层是否决定不重新渲染?我将更新我的部分数据
-
第一个问题解决,更新中
-
再次更新,这似乎是特定于将其放入包装“setTimeout”函数中
标签: reactjs react-native