React Native FlatList Grid自定义视图

时间:2019-05-15 18:11:07

标签: android react-native gridview react-native-flatlist

我正在开发一个react本机应用程序,该应用程序在Flatlist网格视图中显示数据。 为此,我遵循了在博览会上找到的代码。我很好但是我需要的是,我希望第一行只渲染一个项目。这样我就可以使用空白空间先显示一些数据。

这是博览会链接。

  

https://snack.expo.io/@savadks1818/react-native-flatlist-grid

这是代码

      import React from 'react';
      import { StyleSheet, Text, View, FlatList, Dimensions } from 'react-native';

      const data = [
        { key: 'A' }, { key: 'B' }, { key: 'C' }, { key: 'D' }, { key: 'E' }, { key: 'F' }, { key: 'G' }, { key: 'H' }, { key: 'I' }, { key: 'J' },
        { key: 'K' },
        // { key: 'L' },
      ];

      const formatData = (data, numColumns) => {
        const numberOfFullRows = Math.floor(data.length / numColumns);

        let numberOfElementsLastRow = data.length - (numberOfFullRows * numColumns);
        while (numberOfElementsLastRow !== numColumns && numberOfElementsLastRow !== 0) {
          data.push({ key: `blank-${numberOfElementsLastRow}`, empty: true });
          numberOfElementsLastRow++;
        }

        return data;
      };

      const numColumns = 3;
      export default class App extends React.Component {
        renderItem = ({ item, index }) => {
          if (item.empty === true) {
            return <View style={[styles.item, styles.itemInvisible]} />;
          }
          return (
            <View
              style={styles.item}
            >
              <Text style={styles.itemText}>{item.key}</Text>
            </View>
          );
        };

        render() {
          return (
            <FlatList
              data={formatData(data, numColumns)}
              style={styles.container}
              renderItem={this.renderItem}
              numColumns={3}
            />
          );
        }
      }

      const styles = StyleSheet.create({
        container: {
          flex: 1,
          marginVertical: 20,
        },
        item: {
          backgroundColor: '#4D243D',
          alignItems: 'center',
          justifyContent: 'center',
          flex: 1,
          margin: 3,
          height: Dimensions.get('window').width / numColumns, // approximate a square
        },
        itemInvisible: {
          backgroundColor: 'transparent',
        },
        itemText: {
          color: '#fff',
        },
      });

1 个答案:

答案 0 :(得分:0)

您可以通过在数据数组中的所需位置添加新对象来实现此目的

const data = [
  { key: 'A' },
  { empty: true, key: 'xxx' },
  { empty: true, key: 'xxx' },
  { key: 'B' },
  { key: 'C' },
  { key: 'D' },
  { key: 'E' },
  { key: 'F' },
  { key: 'G' },
  { key: 'H' },
  { key: 'I' },
  { key: 'J' },
  { key: 'K' },
  { key: 'L' },
];

添加项目要做

data.splice(1, 0, { empty: true, key: 'xxx' });