找不到导航对象。您的组件是否在导航器的屏幕内?

Jag*_*shi 8 android ios react-native react-native-navigation react-navigation-stack

在我下面的代码中,当我使用 useNavigation() 时,它会给出一个错误,比如我的问题如何使用 useNavigation,请任何人都可以解决这个错误...错误:找不到导航对象。您的组件是否在导航器的屏幕内?我按照这里的代码https://rnfirebase.io/messaging/notifications#handling-interaction

import React, {useState, useEffect } from 'react';
import messaging from '@react-native-firebase/messaging';
import { NavigationContainer, useNavigation } from "@react-navigation/native";
import { createStackNavigator, HeaderTitle, } from "@react-navigation/stack";
const Stack = createStackNavigator();

function App(props) {
     const navigation = props.navigation
    //const navigation = useNavigation();
    const [initialRoute, setInitialRoute] = useState('Splash Screen');

    useEffect(() => {
        messaging().onMessage(remoteMessage => {
            navigation.navigate("Description Screen");
            console.log(props.navigation)
        });
    }, []);

    return (
        <NavigationContainer>
            <Stack.Navigator
                initialRouteName={initialRoute}
                headerMode="none"
                screenOptions={{
                    gestureEnabled: true,

                }}
            >

                <Stack.Screen name="Splash Screen" component={SplashScreen} />
                <Stack.Screen name="Description Screen" component={DescriptionScreen} />
            </Stack.Navigator>

        </NavigationContainer>

    );
}

export default App;
Run Code Online (Sandbox Code Playgroud)

小智 19

您无法访问导航,因为它尚未准备好。您可以为您的导航创建参考,然后将其导出并在您想要的地方使用它。

// App.js

import { NavigationContainer } from '@react-navigation/native';
import { navigationRef } from './RootNavigation';

export default function App() {
  return (
    <NavigationContainer ref={navigationRef}>{/* ... */}</NavigationContainer>
  );
}
Run Code Online (Sandbox Code Playgroud)

`

然后您可以通过定义和导出您的方法来使用它

// RootNavigation.js

import * as React from 'react';

export const navigationRef = React.createRef();

export function navigate(name, params) {
  navigationRef.current?.navigate(name, params);
}
Run Code Online (Sandbox Code Playgroud)

您可以通过任何方式使用onReady回调来表明您的导航已准备好

// App.js

import { NavigationContainer } from '@react-navigation/native';
import { navigationRef, isReadyRef } from './RootNavigation';

export default function App() {
  React.useEffect(() => {
    return () => {
      isReadyRef.current = false
    };
  }, []);

  return (
    <NavigationContainer
      ref={navigationRef}
      onReady={() => {
        isReadyRef.current = true;
      }}
    >
      {/* ... */}
    </NavigationContainer>
  );
}
Run Code Online (Sandbox Code Playgroud)

  • 如前所述,这并不完整,尚未更新。因此,我将在此处添加原始文档的链接,以防有人遇到与我相同的问题。IT 建议采用非常相似的方法。https://reactnavigation.org/docs/navigating-without-navigation-prop/ (4认同)