几天来,我一直被一个问题绊倒,但我找不到解决方案……在我的应用程序中,我有一个tabNavigator和一个stackNavigator.

我的问题是,在我的tabNavigator中,我想在我的HeaderRight中放一个图标,当你点击它时,你就会进入与我的购物车对应的堆栈.当我在导航器中输入我的堆栈的名称"Cart"时,我得到一个错误:The action 'NAVIGATE' with payload {"name": "Cart"} was not handled by any navigator. Do you have a screen named 'Cart'?

当我需要导航到My Stack时,我只能导航到Tab.Screen.

我的TabNavigator:

const Tab = createBottomTabNavigator();

const TabNavigator = () => {
  const navigation = useNavigation();
  return (
    <Tab.Navigator
      screenOptions={() => ({
        headerStyle: {
          backgroundColor: appColors.primary,
          height: Platform.OS === "ios" ? 60 : undefined,
        },
        headerTitle: () => <Logo />,
        headerTitleAlign: "center",
        headerRight: () => (
          <Feather
            name="shopping-cart"
            size={24}
            color="white"
            onPress={() => {
              navigation.navigate("Cart");
            }}
          />
        ),
        headerRightContainerStyle: {
          paddingEnd: 10,
        },
      })}
    >
      <Tab.Screen
        name="News"
        component={HomePageStack}
        options={{
          tabBarIcon: ({ focused, color, size }) => (
            <Entypo name="news" size={40} color="black" />
          ),
          tabBarShowLabel: false,
        }}
      />
      <Tab.Screen
        name="Cheval"
        component={HorseStack}
        options={{
          tabBarIcon: ({ focused, color, size }) => (
            <MaterialCommunityIcons name="horse" size={40} color="black" />
          ),
          tabBarShowLabel: false,
        }}
      />
      <Tab.Screen
        name="Sell"
        component={SellStack}
        options={{
          tabBarIcon: ({ focused, color, size }) => (
            <Entypo name="shopping-basket" size={40} color="black" />
          ),
          tabBarShowLabel: false,
        }}
      />
    </Tab.Navigator>
  );
};

export default TabNavigator;

和我的StackNavigator:

const Stack = createStackNavigator<RootStackParamList>();

const MainStackNavigator = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="HomePage"
        component={HomePageStack}
        options={{
          headerShown: false,
        }}
      />
    </Stack.Navigator>
  );
};

// Stack for the news
const HomePageStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="Home"
        component={Home}
        options={{
          headerShown: false,
        }}
      />
      <Stack.Screen
        name="DetailsNewsScreen"
        component={DetailsNewsScreen}
        options={{
          headerShown: false,
        }}
      />
    </Stack.Navigator>
  );
};

const HorseStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="Horse"
        component={HorseScreen}
        options={{
          headerShown: false,
        }}
      />
    </Stack.Navigator>
  );
};

const SellStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="SellStack"
        component={HomeSellScreen}
        options={{
          headerShown: false,
        }}
      />
      <Stack.Screen
        name="ServicesSell"
        component={ServicesScreen}
        options={{
          title: "",
          headerBackTitle: "Retour",
        }}
      />
      <Stack.Screen
        name="ClothesScreen"
        component={ClothesScreen}
        options={{
          title: "",
          headerBackTitle: "Retour",
        }}
      />
      <Stack.Screen
        name="HorseActivity"
        component={HorseActivityScreen}
        options={{
          title: "",
          headerBackTitle: "Retour",
        }}
      />
    </Stack.Navigator>
  );
};

const LoginStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="Login"
        component={LoginScreen}
        options={{
          headerShown: false,
        }}
      />
    </Stack.Navigator>
  );
};

const CartStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen
        name="Cart"
        component={HomeScreenCart}
        options={{
          headerShown: false,
        }}
      />
    </Stack.Navigator>
  );
};

export {
  MainStackNavigator,
  HomePageStack,
  HorseStack,
  SellStack,
  LoginStack,
  CartStack,
};

我试着使用屏幕选项的props ,但不起作用.我也试着用useNavigation来使用导航,但同样不起作用.

推荐答案

如果TabNavigator是根堆栈,则它不知道CartStack的存在,因为它不被用作TabNavigator或其任何子堆栈中的屏幕.

如果CartStack不打算作为TabNavigator的子屏幕,那么您需要一个父导航器来包含这两个堆栈.

export function AppNavigator() {
  return (
    <Stack.Navigator
      initialRouteName="MainTabs">
      <Stack.Screen name="MainTabs" component={TabNavigator} />
      <Stack.Screen name="CartStack" component={CartStack} />
      // ... other root level navigation stacks
    </Stack.Navigator>
  );
}

这将允许您从任何位置通过以下方式导航到Cart屏幕:

navigation.navigate("CartStack", {screen: "Cart"})

Javascript相关问答推荐

Flisk和JS错误:未捕获的Syntax错误:意外的令牌'<'

在JavaScript中对大型级联数组进行切片的最有效方法?

按下同意按钮与 puppeteer 师

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

如何添加绘图条形图图例单击角形事件

在Three JS中看不到补间不透明度更改效果

如何使用子字符串在数组中搜索重复项

在执行异步导入之前判断模块是否已导入()

TypeError:无法分解';React2.useContext(...)';的属性';basename';,因为它为空

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

搜索功能不是在分页的每一页上进行搜索

如何在FastAPI中为通过file:/URL加载的本地HTML文件启用CORS?

一个实体一刀VS每个实体多刀S

将对象推送到数组会导致复制

<;img>;标记无法呈现图像

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

在SuperBase JS客户端中寻址JSON数据

TabNavigator和StackNavigator之间的Reaction Native中的导航问题

如何处理不带参数的redux thunk payloadCreator回调函数?

带元素数组的Mongo聚合