javascript - 列表状态更新时,react-native flatlist 图像闪烁
问题描述
我用从谷歌后端FlatList
获取的数据填充了一个。firebase
实现是相当标准的,这是一个精简的版本:
export default class Day extends Component {
state = { data : [], today: false }
componentWillMount = async () => {
const { today } = this.state;
const { calendarDb } = this.props
await calendarDb.onNewAgenda({
day : today
, then: this.parseOnListed
})
}
parseOnListed = blob => {
const { data } = this.state;
data.push(blob)
this.setState({ data: data })
}
renderItem = ({ item }) =>
<Hour data = {item}/>
render = () =>
<FlatList
data = {this.state.data}
renderItem = {this.renderItem}
keyExtractor = {item => item.ID}
/>
}
问题是每次新blob
推入时data
,<Image/>
组件都会<Hour data={item}/>
闪烁。这使得该列表在用户体验方面不可行。是什么赋予了?<Hour/>
也是标准的,或多或少看起来像这样:
const Hour = ({ data }) =>
<View>
<Image source={{uri:data.uri}}/>
<Text> {data.name} </Text>
</View>
的内容<Text>
不闪烁,只有来自的图像<Image .../>
解决方案
检查是否keyExtractor
正在获取唯一 ID。平面列表在状态更新时重新渲染,并再次下载图像。因为,正如@Guruparan Giritharan 的评论中所说,每一行都不是唯一标识的。
推荐阅读
- reactjs - 输入 onChange 处理程序处理程序不起作用 - React Hooks
- python - 在python中选择特征
- html - 为什么我的主题文本(“学习初等数学”)被推到左边?
- azure - 无法登录 Azure:错误:通过 Terraform 计划从 Azure 元数据服务检索环境
- excel - Excel宏选择行和列的可变范围
- python-3.x - TypeError:float() 参数必须是字符串或数字,而不是“PolyCollection”
- asp.net-core - 如何从浏览器中清除 Blazor WebAssembly DLL?
- angular - 在不使用数据库的情况下以角度保存复选框数据
- apache-spark - 在 Spark SQL 中按日和月比较日期
- javascript - 尝试使用 ahax 将值作为数组获取并分配给变量