【问题标题】:Dealing With Multiple Flatlists on the same Screen在同一屏幕上处理多个平面列表
【发布时间】:2020-08-11 09:07:36
【问题描述】:

当在同一个屏幕上有两个平面列表时,请帮助我处理不必要的重新渲染

我的屏幕需要两个平面列表-

  1. 对于主机
  2. 对于队列

当组件挂载时,我像这样从 api 调用中获取数据-

{
  "hosts": [{"id":"1", "name":"kyouma"},...],
  "queue": [{"id":"99", "name":"eren"},...]
}

现在我要做的是像这样将我的 hostsqueue 分别存储在我的 redux 存储中-

this.props.dispatch({
        type: GET_ROOM_HOSTS,
        payload: info['hosts']
      })

this.props.dispatch({
        type: GET_ROOM_QUEUE,
        payload: info['queue']
      })

其中 info 是从 api 调用接收到的对象,如上所示。现在我ma​​pStateToProps这两个从redux store到默认的screen组件这样-

  1. this.props.roomQueue 用于队列
  2. 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) 中,并显示在屏幕的不同部分(底部的队列)屏幕和屏幕顶部的主机)。 queuehosts 也是相互独立的。屏幕是这样的

我的问题是,即使 this.props.roomQueue 发生变化,具有 data={this.props.roomHosts}FlatList 也会重新渲染。

如何防止这种重新渲染,以确保只有当FlatList的对应数据发生变化时,才会重新渲染,否则不会。我是否必须更改存储 queuehosts 的方式?还是有别的?

【问题讨论】:

  • 如何在 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


【解决方案1】:

您可以只使用一个平面列表来做到这一点。将两个数组合并为一个并显示一个列表中的结果..您可以在 ui 中使用类型将它们保留。

这是真正的开发者做的程序,cz在同一个页面和同一个方向上渲染2个列表根本不是什么意思。您的查询有效。

【讨论】:

  • 我不能这样做,因为这两个数据是相互独立的,而且 Flatlists 显示在屏幕的不同部分
  • 您必须进行自定义,以便您可以客观化不同的项目。假设您将 HOSTS QUEUE 组合在一个数组中。您可以将键作为类型推送到每个对象以区分它们
  • 这将再次意味着重新渲染,即使其中一个主机或队列发生变化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多