reactjs React Native导航v5 -我的导航设置有什么问题?

mrfwxfqh  于 2022-12-03  发布在  React
关注(0)|答案(2)|浏览(109)

我有一个问题,取决于与版本5的React导航使用的导航器设置。
下面是我的代码:

import React from "react";
import { LogBox, Platform, TouchableOpacity } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack"
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import {
  Auth,
  Monatsübersicht2,
  StundenChecken,
  StundenEintragen,
  Logout,
  TagesübersichtDiff,
  StundenEdit,
  MonatsberichtComponent,
} from "../screens/index";
import Icon from "react-native-vector-icons/Ionicons";
import AsyncStorage from "@react-native-async-storage/async-storage";

LogBox.ignoreAllLogs();

const Stack = createStackNavigator();

function EintragenStack() {
  return (
    <Stack.Navigator initialRouteName="Eintragen">
      <Stack.Screen 
        name="Eintragen"
        component={StundenEintragen}
        options={{
          headerTitle: "Stundenverwaltung",
          headerTitleStyle: {
          color: "white",
          alignSelf: "center",
      },
      headerStyle: {
        backgroundColor: "#a51717",
      },
      headerRight: () => (
        <TouchableOpacity onPress={console.log("unlockUserHandler")}>
          <Icon
            style={{ paddingRight: 20 }}
            size={25}
            color="white"
            name="lock-open"
          />
        </TouchableOpacity>
      ),
        }}
      />
    </Stack.Navigator>
)};

function CheckStack(){
  return (
    <Stack.Navigator initialRouteName="Übersicht" >
      <Stack.Screen
        name="Übersicht"
        component={StundenChecken}
      />

      <Stack.Screen
        name="Monat"
        component={Monatsübersicht2}
        options={({navigation}) => ({
          title: "Monatsübersicht"
        })}
      />

      <Stack.Screen
        name="Tag"
        component={TagesübersichtDiff}
        options={({navigation}) => ({
          headerRight: () => (
            <TouchableOpacity onPress={() => console.log("Ahllo")}>
              <Icon
                style={{ paddingRight: 20 }}
                size={25}
                color="#a51717"
                name="lock-open"
              />
            </TouchableOpacity>
          ),
          title: "Tagesübersicht"
        })}
      />

      <Stack.Screen
        name="Edit"
        component={StundenEdit}
        options={{
          headerTitle: "Stunden bearbeiten",
          headerTitleStyle: {
            color: "white",
            alignSelf: "center",
          },
          headerStyle: {
            backgroundColor: "#F39237",
          },
          headerRight: () => (
            <TouchableOpacity onPress={console.log("unlockUserHandler")}>
              <Icon
                style={{ paddingRight: 20 }}
                size={25}
                color="white"
                name="lock-open"
              />
            </TouchableOpacity>
          ),
        }}
      />

    </Stack.Navigator>

  )}


const Tab = createBottomTabNavigator();

function Tabs() {
return (
  <Tab.Navigator  
  initialRouteName="Eintragen"
  screenOptions={{
    backBehavior: "history",
    resetOnBlur: true, 
    tabBarOptions: {
      labelStyle: {
        fontSize: 12,
        color: "black",
      },
      showIcon : true,
      activeTintColor: "red",
      activeBackgroundColor: "#ccc",
    }
  }}>
    <Tab.Screen name="Eintragen" component={EintragenStack} options={{ tabBarIcon:() => (<Icon name="add-circle-outline" size={Platform.OS == "ios" ? 30 : 28} color={"green"} />)}}/>
    <Tab.Screen name="Übersicht" component={CheckStack} options={{ tabBarIcon:() => (<Icon name="calendar" size={Platform.OS == "ios" ? 30 : 28} color={"black"} />)}}/>
    <Tab.Screen name="Monatsbericht" component={MonatsberichtComponent} options={{headerTitle: "Monatsbericht abschließen", tabBarIcon:() => (<Icon name="download" size={Platform.OS == "ios" ? 30 : 28} color={"black"} />)}}/>
    <Tab.Screen name="Logout" component={Logout} options={{ tabBarIcon:() => (<Icon name="power" size={Platform.OS == "ios" ? 30 : 28} color={"red"} />)}}/>
  </Tab.Navigator>
)
}

const AppNavigator = () =>  {
  return (
      <NavigationContainer>
        <Stack.Navigator 
          screenOptions={{
            headerShown: false,
            headerLeft: null,
            gestureEnabled: false
          }}
          >
        <Stack.Screen name="Auth" component={Auth} />
        <Stack.Screen name="Tabs" component={Tabs} />
        </Stack.Navigator>
      </NavigationContainer>
)
}

export default function App() {
  return <AppNavigator/>;
}

现在,在我的Auth屏幕中,我可以导航到选项卡-因此,基本上可以通过调用以下命令登录到应用程序:

navigation.replace("Tabs");

但是,当我尝试导航到我的CheckStack时,例如,它不工作,我被抛出此错误:
呼叫:navigation.replace("CheckStack");
错误:

ERROR  The action 'REPLACE' with payload {"name":"CheckStack"} was not handled by any navigator.

Do you have a screen named 'CheckStack'?
anhgbhbe

anhgbhbe1#

所以基本上修复的是我的“CheckStack”必须在NavigationContainer中使用的StackNavigator内部-否则它将无法在内部使用导航。

<NavigationContainer>
    <Stack.Navigator 
      screenOptions={{
        headerShown: false,
        headerLeft: null,
        gestureEnabled: false
      }}
      >
    <Stack.Screen name="Auth" component={Auth} />
    <Stack.Screen name="Tabs" component={Tabs} />
    <Stack.Screen name="CheckStack" component={CheckStack} />
    </Stack.Navigator>
  </NavigationContainer>
nzk0hqpo

nzk0hqpo2#

问题是您引用的是函数的名称,而不是特定的屏幕名称
是网名

navigation.replace("Tabs");

这是一个功能,而不是屏幕名称

navigation.replace("CheckStack");

相关问题