开发者问题收集

在 Flatlist 的 renderItem 内导航

2022-08-24
510

我有一个组件 InventoryScreen ,它包含一个像这样的 Flatlist

<FlatList
            numColumns={2}
            data={filteredData}
            keyExtractor={(item, index) => index.toString()}
            renderItem={renderItem}
            stickyHeaderIndices={[0]}
            keyboardDismissMode={"on-drag"}>
</FlatList>
<TouchableOpacity
      onPress={() => navigation.navigate("ItemScreen") }> // <--- Here, it works.
</TouchableOpacity


InventoryScreen 内,我可以使用 navigation

renderItem:

const renderItem = ({ item }: { item: ItemResponse }) => {
  return <ItemView item={item} />;
};

ItemView

const ItemView = ({ item }: { item: ItemResponse }) => {
  return (
<TouchableOpacity
      onPress={() => navigation.navigate("ItemScreen") }> // <--- This is what I want.
</TouchableOpacity

但是,因为 ItemView 中没有可用的 navigation ,所以我无法在那里导航。当尝试将 navigation 传递给 renderItem 时, FlatList 中出现错误:

类型 'ListRenderItemInfo<ItemResponse>' 中缺少属性 'navigation',但在类型 '{ item: ItemResponse; navigation: any; }' 中是必需的。

如何访问 ItemView 中的导航?

3个回答

请尝试一下 根组件

const RootComp = ({navigation})=>{

    const renderItem = ({ item }: { item: ItemResponse }) => {
      return <ItemView item={item} navigation={navigation} />;
    };

return (
<FlatList
            numColumns={2}
            data={filteredData}
            keyExtractor={(item, index) => index.toString()}
            renderItem={renderItem}
            stickyHeaderIndices={[0]}
            keyboardDismissMode={"on-drag"}>
</FlatList>
)

}

ItemView

const ItemView = ({ item, navigation }: { item: ItemResponse }) => {
  return (
<TouchableOpacity
      onPress={() => navigation.navigate("ItemScreen") }> // <--- This is what I want.
</TouchableOpacity
ronak dholariya
2022-08-24

你可以像从父级传递普通道具一样传递导航道具

const renderItem = ({ item }: { item: ItemResponse }) => {
  return <ItemView item={item}  nav={props.navigation} />;
};

希望这有效

FaysalB
2022-08-24

我希望您可以在这里访问导航吗? 然后只需将导航作为props

875643615

然后使用:

449764114
Gaurav Roy
2022-08-24