【问题标题】:How to display different content in a FlatList如何在 FlatList 中显示不同的内容
【发布时间】:2021-07-10 19:17:00
【问题描述】:

我目前遇到了一个我不知道如何正确解决的问题。

我想为我的应用的起始页创建一个提要。提要应无限滚动并尽可能节省资源。 当然,这一切都可以通过 FlatList 组件来完成,但是我不知道如何在 FlatList 中显示不同类型的组件。

这是一张图片,其中包含我对不同类型组件的含义的示例:

Example of complex layout

所以布局必须非常灵活,我不知道如何使用 FlatList 来做到这一点。 我已经考虑过条件渲染,但我再次错过了使其正常工作的方法。

你们中有人解决过这样的问题吗?如有任何建议,我将不胜感激!

【问题讨论】:

  • 您可以为所有不同的组件/列表项分配类型,并在加载时根据项的类型分配不同的样式类。

标签: javascript reactjs react-native react-native-flatlist


【解决方案1】:

您可以创建一个动态返回不同类型内容的组件,例如:

const mock = [
  {
    type: 'feed_1',
    title: 'Lorem',
    feed: [],
  },
  {
    type: 'feed_2',
    title: 'Ipsum',
    feed: [],
  }
]

function App() {
  return (
    <FlatList
      data={mock}
      renderItem={(item) => <Dynamic item={item} />}
    />
  );
}

const Dynamic = memo(({item}) => { 
  switch (item.type) {
    case 'feed_1':
      return <ComponentForFeed1 data={item} />
    case 'feed_2':
      return <ComponentForFeed2 data={item} />

    default:
      return null;
  }
})

您还应该在您的“动态”组件上使用memo 以防止不必要的渲染,不要将上面的代码按字面意思理解,这只是您可以做些什么来动态更改渲染的草稿。

您还可以获取您的部分的相似特征并将它们放在动态组件上,这样您只需更改实际内容。

【讨论】:

  • 首先非常感谢您的详细解答。我已经考虑过你的做法,但我一直怀疑这是否真的是正确的做法。而且我还没有真正找到关于这个主题的任何有用信息。使用备忘录确实是一个非常有用的技巧,我之前没有想过。您认为这种方法对性能有不良影响吗?例如,因为我无法设置 getItemLayout 道具。但再次:非常感谢你:)
  • 不用担心,所以关于 getItemLayout,是的,您将无法轻松计算项目高度,但如果列表的每个部分都有预定义的高度,您可以使用开关计算它,就像动态组件,无论如何,我认为缺少 getItemLayout 不会提高您的性能,因为它会影响非常大的列表,并且从布局的外观来看,您的内容较长的元素较少。您还有其他性能技巧,例如 removeClippedSubviews 可以清除屏幕上看不见的元素的内存。您的项目取得成功。
  • 哦,另一件寻找性能提升的方法是使用正确的图像尺寸,使用大图像并调整它们的大小以适应支架可能会非常消耗内存,请确保使用小尺寸的拇指已经裁剪,因此您的列表可以快速呈现。过去看到很多项目遭受这种痛苦。
  • 感谢所有提示!你真的让我很开心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2019-09-24
  • 2022-11-18
相关资源
最近更新 更多