【发布时间】:2020-08-11 09:07:36
【问题描述】:
当在同一个屏幕上有两个平面列表时,请帮助我处理不必要的重新渲染
我的屏幕需要两个平面列表-
- 对于主机
- 对于队列
当组件挂载时,我像这样从 api 调用中获取数据-
{
"hosts": [{"id":"1", "name":"kyouma"},...],
"queue": [{"id":"99", "name":"eren"},...]
}
现在我要做的是像这样将我的 hosts 和 queue 分别存储在我的 redux 存储中-
this.props.dispatch({
type: GET_ROOM_HOSTS,
payload: info['hosts']
})
this.props.dispatch({
type: GET_ROOM_QUEUE,
payload: info['queue']
})
其中 info 是从 api 调用接收到的对象,如上所示。现在我mapStateToProps这两个从redux store到默认的screen组件这样-
-
this.props.roomQueue用于队列和 -
this.props.roomHosts用于主机
我的FlatList的是这样的-
<FlatList
data={this.props.roomQueue}
horizontal={true}
keyExtractor = {item => item.id}
renderItem({item} => {
return(
<customComponent (with suitable props) ..../>
)
})
/>
<FlatList
data={this.props.roomHosts}
numColumns={3}
keyExtractor = {item => item.id}
renderItem({item} => {
return(
<customComponent (with suitable props) ..../>
)
})
/>
请注意这两个 FlatList's 都存在于屏幕的同一个组件 (React.Component) 中,并显示在屏幕的不同部分(底部的队列)屏幕和屏幕顶部的主机)。 queue 和 hosts 也是相互独立的。屏幕是这样的
我的问题是,即使 this.props.roomQueue 发生变化,具有 data={this.props.roomHosts} 的 FlatList 也会重新渲染。
如何防止这种重新渲染,以确保只有当FlatList的对应数据发生变化时,才会重新渲染,否则不会。我是否必须更改存储 queue 和 hosts 的方式?还是有别的?
【问题讨论】:
-
如何在 2 个平面列表中呈现您的项目?
-
@ViktorJovanovic 请检查更新后的问题。我的 FlatList 是标准的。
-
实际上,您所做的似乎是正确的。您的“CustomComponent”组件是否从 PureComponent 扩展而来?如果您不这样做,我真的认为如果您的对象“QueueRoom”和“HostRoom”的深度超过 1 级,它可以帮助您结合 immerJS 解决您的问题。 (reactjs.org/docs/react-api.html#reactpurecomponent)
标签: reactjs react-native redux react-redux react-native-flatlist