将数组传递给 FlatList React Native(不渲染)

Passing Array into FlatList React Native (Not Rendering)

所以我有这个数组,如下图:

const categoryData=[
        {
            id: 1,
            name: "cat1",
            icon: icons.one
        },
        {
            id: 2,
            name: "cat2",
            icon: icons.two
        },
]

我正在尝试将其存储在名为类别的 useState const 中,然后在 FlatList 的数据参数中显示类别:

const [categories, setCategories] = React.useState(categoryData)

<FlatList
    data={categories}
    keyExtractor={item => `${item.id}`}
    renderItem={renderItem}
    numColumns={4}
    contentContainerStyle={{ padding: SIZES.padding }}
/>

但是,在 FlatList 中没有呈现任何内容(需要注意的重要一点是,FlatList 在触发模式时加载,并且 FlatList 在 data={categoryData} 而不是仅呈现类别时正确呈现项目)。

感谢您的帮助。

编辑:这里有一个 Expo link 来描述这个问题 (https://snack.expo.dev/HsffYfsrc)

如果您说它在触发模式时有效,那么问题可能是您的数据尚未准备好加载。 我建议你试试:

{categories && <FlatList
data={categories}
keyExtractor={item => `${item.id}`}
renderItem={renderItem}
numColumns={4}
contentContainerStyle={{ padding: SIZES.padding }}/>}

在您的代码示例中,您已经 used/referenced categoryData 先于 声明它。

const App = () => {
  const [categories, setCategories] = React.useState(categoryData); // <-- used, undefined
  const [modalVisible, setModalVisible] = React.useState(false);

  const categoryData = [ // <-- declared here
    {
      id: 1,
      name: 'cat1',
      icon: 'test'
    },
    {
      id: 2,
      name: 'cat2',
      icon: 'test'
    },
  ];

  function renderList() {
    ...
  }

  return <SafeAreaView>{renderList()}</SafeAreaView>;
}

我没有看到任何内部依赖关系(对组件)要求在组件内声明 categoryData。我建议在组件 外部 声明它,以便它在组件之前和范围内声明。

const categoryData = [ // <-- declared
  {
    id: 1,
    name: 'cat1',
    icon: 'test',
  },
  {
    id: 2,
    name: 'cat2',
    icon: 'test',
  },
];

const App = () => {
  const [categories, setCategories] = React.useState(categoryData); // <-- defined
  const [modalVisible, setModalVisible] = React.useState(false);

  function renderList() {
    ...
  }

  return <SafeAreaView>{renderList()}</SafeAreaView>;
};

Expo Snack

如果 categoryData 在编译时未知,并且 实际上 稍后获取,则提供有效的初始状态和 load/update category 状态在 useEffect 钩子中。

示例:

const App = () => {
  const [categories, setCategories] = React.useState([]); // <-- valid initial state
  const [modalVisible, setModalVisible] = React.useState(false);

  useEffect(() => {
    ... fetch/loading logic
    setModalVisible(data); // <-- update state with fetched/loaded data
  }, []);

  function renderList() {
    ...
  }

  return <SafeAreaView>{renderList()}</SafeAreaView>;
};