React Native单个嵌套屏幕不跟踪堆栈,因此goBack()无法按预期工作

mccptt67  于 2023-03-19  发布在  React
关注(0)|答案(1)|浏览(93)

我的产品类别是多层次的。
我创建了一个可重用的Categories Screen,它渲染flatList中的第一层。如果我点击某个类别,它会导航到同一个Categories Screen,并传递到第二层,依此类推。

添加产品屏幕〉类别屏幕(L1)〉类别屏幕(L2)〉类别屏幕(L3)

问题是当我在(L3)中按navigation.goBack()时,它会把我带回到Product Screen,我猜这是“根”。

相反,我更希望goBack带我到L2。

我假设它不会,因为我重用了同一个屏幕,但我不知道如何嵌套单个屏幕并维护堆栈历史而不覆盖它自己。

这是导航器:

<Stack.Navigator ...>
    <Stack.Screen
      component={ProductScreen}
      name="ProductScreen"
    />
    <Stack.Screen
    component={CategoryScreen}
    name="CategoryScreen"
    />
  </Stack.Navigator>

这是类别屏幕:

export const CategoryScreen = ({ navigation }: ScreenProps) => {
  const renderItem: ListRenderItem<string> = ({item}) => {
      ...
      <Pressable onPress={() => handleCategoryPress()}>
      ...
      </Pressable>
    );
  };

  return (
    <ScreenContainer goBack={navigation.goBack}>
      <FlatList data={categories} renderItem={renderItem} />
    </ScreenContainer>
  );

  function handleCategoryPress() {
   ...
    navigation.navigate(
      'CategoryScreen',
      { categories: filteredCategories, level: nextLevel },
    );
  }
};

以下是我的版本:

"@react-navigation/native": "^6.0.6",
    "@react-navigation/native-stack": "^6.2.5",
    "react-native": "0.70.5",

先谢谢你。

v64noz0r

v64noz0r1#

我设法修复了将navigation.navigate更改为navigate.push的问题:

function handleCategoryPress() {
   ...
    navigation.push(  // <--- here
      'CategoryScreen',
      { categories: filteredCategories, level: nextLevel },
    );
  }

相关问题