【发布时间】:2017-09-09 21:40:03
【问题描述】:
与 ListView 不同,我们可以更新 this.state.datasource。有什么方法或者例子可以更新 FlatList 或者重新渲染吗?
我的目标是在用户按下按钮时更新文本值...
renderEntries({ item, index }) {
return(
<TouchableHighlight onPress={()=> this.setState({value: this.state.data[index].value+1})>
<Text>{this.state.data[index].value}</Text>
</TouchableHighlight>
)
}
<FlatList
ref={(ref) => { this.list = ref; }}
keyExtractor={(item) => item.entry.entryId}
data={this.state.data}
renderItem={this.renderEntries.bind(this)}
horizontal={false} />
【问题讨论】:
-
docs for FlatList 说“这是一个
PureComponent,这意味着如果道具保持浅相等,它将不会重新渲染。确保您的renderItem函数所依赖的所有内容都传递为更新后不是===的道具,否则您的 UI 可能不会在更改时更新。这包括data道具和父组件状态。您是否遵循此建议? -
无论我用
extraData和shouldItemUpdate尝试什么,我都无法让列表重新渲染。我最终做的是清除状态,等待渲染然后更新状态。this.setState({ data: null }, () => { this.setState({ data: actualData }) });
标签: reactjs react-native react-native-flatlist