You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native传递导航至函数报错:null不是对象

React Native 导航参数为null导致TypeError的解决方法

问题根源

你在getLoggedOutScreens里调用testViews(null, false),把null传给了tabNavigation参数,而renderBackToDashboard里直接调用tabNavigation.navigate,这就触发了null is not an object evaluating tabNavigation.navigate错误。之前尝试的几种传参方式都没命中正确的导航实例,所以没解决问题。

解决步骤

1. 传递封装好的RootNavigation实例

你已经在RootNavigation.ts里封装了RootNavigation类实例,它自带navigate方法,直接把它传给testViews即可:

  • 首先在当前文件导入RootNavigation:
import { NavigationRef, RootNavigation } from './RootNavigation';
  • 修改getLoggedOutScreens里的调用:
const getLoggedOutScreens = () => {
    return (
        <Stack.Navigator screenOptions={defaultOptions}>
            <Stack.Screen name={SCREEN_NAMES.AUTH} component={AuthScreen} options={{ headerShown: false }} />
            {testViews(RootNavigation, false)} {/* 这里传RootNavigation */}
            <Stack.Screen name={SCREEN_NAMES.MY_SCREEN} component={MyScreen} options={{ title: t('myScreen') }} />
        </Stack.Navigator>
    );
};

2. 添加空值保护(可选但推荐)

为了避免后续再出现类似空值调用的问题,在renderBackToDashboard里给navigate调用加上可选链:

const renderBackToDashboard = (tabNavigation: any) => {
    return <HeaderBackButton 
        tintColor={defaultOptions.headerTintColor||'white'} 
        labelVisible={defaultOptions.headerBackTitleVisible||false} 
        onPress={() => { tabNavigation?.navigate(SCREEN_NAMES.DASHBOARD_TAB); }} {/* 加?. */}
    />
}

为什么之前的尝试无效

  • testViews(NavigationRef, false):NavigationRef是React的Ref对象,本身没有navigate方法,只有current属性才指向导航实例
  • testViews(NavigationRef.current, false):执行getLoggedOutScreens时,NavigationContainer还没完成挂载,NavigationRef.current此时还是null
  • testViews({NavigationRef}, false):传递的是包含Ref对象的普通对象,不是具备navigate方法的导航实例

内容的提问来源于stack exchange,提问作者Anarkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:27:28