React原生平面列表中的网格视图

x759pob2  于 2022-12-24  发布在  React
关注(0)|答案(2)|浏览(187)

如何在react native in a FlatList组件中实现这样的视图?
通常在网络中,使用css网格很容易,但我无法在react native中实现。

rm5edbpk

rm5edbpk1#

如果要渲染n by n网格,可以使用FlatList的numColumns属性,然后只需将数据传递到FlatList的data属性中,通过在renderItem属性中传递函数来指定如何渲染网格中的每个单元格。
一个粗略的例子如下所示:

import { FlatList } from "react-native";

<FlatList 
  data={myData}
  numColumns={3}
  renderItem={({ item }) => <MyCellComponent cellData={item} />}
/>

但是,您的问题有点不同,因为您想要呈现一个不均匀的网格。您可以将网格划分为两个独立的组件,ComponentA和ComponentB,并在ScrollView中呈现它们。

一个粗略的代码示例如下所示:

import { ScrollView } from "react-native";

<ScrollView>
  <ComponentA />
  <ComponentB />
  <ComponentA />
</ScrollView>

不过,如果您真的想使用FlatList,那么您可以创建第三个组件ComponentC,它基本上会像这样 Package 上一个示例:

import { View } from "react-native";

function ComponentC() {
  return (
    <View>
      <ComponentA />
      <ComponentB />
      <ComponentA />
    </View>
  );
}

然后在FlatList内部呈现它:

<FlatList 
  data={myData}
  renderItem={({ item }) => (<ComponentC data={item} />)}
/>
mo49yndu

mo49yndu2#

另一种可能的解决方案是使用FlashList https://shopify.github.io/flash-list/docs/guides/masonry

import React from "react";
import { View, Text, StatusBar } from "react-native";
import { MasonryFlashList } from "@shopify/flash-list";
import { DATA } from "./data";

const MyMasonryList = () => {
  return (
    <MasonryFlashList
      data={DATA}
      numColumns={2}
      renderItem={({ item }) => <Text>{item.title}</Text>}
      estimatedItemSize={200}
    />
  );
};

相关问题