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

React Native+TypeScript下使用useNavigation跳转页面不显示如何解决

问题原因及解决方案

核心原因

  • 弹窗层级遮挡:你触发跳转时AccountHeaderComponent中的Modal处于打开状态,React Native Modal的层级默认高于导航栈所有页面,新跳转的VerificationScreen被Modal遮挡,按返回键时Modal先被销毁才会露出下层页面。
  • navigate参数错误:navigation.navigate的第一个参数需要传入Stack.Screen上定义的路由名称字符串,不能直接传入组件对象。
  • 语法错误:MainNav.tsx中VerificationScreen的name属性缺少闭合引号,会导致路由匹配失败。

修复步骤

1. 修正MainNav.tsx的语法错误

补全路由名称的闭合引号:

const MainNavigator = () => {
return (
        <MainStack.Navigator>
            <MainStack.Screen
                name="VerificationScreen"
                component={VerificationScreen}
            />
        </MainStack.Navigator>
    );
};

2. 给Modal添加显隐控制,透传关闭方法

修改AccountHeaderComponent.tsx,添加Modal可见状态控制,把关闭方法传给下层组件:

import { useState } from 'react';
import AccountsPopUpComponent from "./AccountsPopUpComponent";

export interface AccountHeaderComponentProps {
    tintColor?: string,
}

const AccountHeaderComponent = (props: AccountHeaderComponentProps) => {
    const {tintColor} = props;
    const [modalVisible, setModalVisible] = useState(false);

    const closeModal = () => {
        setModalVisible(false);
    };

    return (<>
          <Modal visible={modalVisible} onRequestClose={closeModal}>
              <AccountsPopUpComponent onClose={closeModal}/>
          </Modal>
          <TouchableOpacity onPress={() => setModalVisible(true)}>
              <View>
                  <Icon name={'account-outline'}/>
              </View>
          </TouchableOpacity>
      </>
    )
};

3. 透传关闭方法到ProfileComponent

修改AccountsPopUpComponent.tsx,把Modal关闭方法传给ProfileComponent:

const AccountsPopUpComponent = (props: any) => {
    const {onClose} = props;

    const getCurrentPage = () => {
        switch (page) {
            case '':
                return <ProfileComponent onModalClose={onClose} />
            default:
                return <DummyComponent/>
        }
    }

    return (
          <View style={{flex: 1}}>{getCurrentPage()}</View>
    )
};

4. 修正跳转逻辑,跳转前先关闭Modal

修改ProfileComponent.tsx,先关闭Modal再执行跳转,修正navigate参数:

const ProfileComponent = (props: ProfileComponentProps) => {
  const navigation = useNavigation();
  const { onModalClose } = props;

  const gotoVerifyScreen= () => {
    onModalClose();
    // 等待Modal关闭动画完成后再跳转,避免动画冲突,可根据实际动画时长调整延迟时间
    setTimeout(() => {
      navigation.navigate('VerificationScreen');
    }, 300)
  };

  return (
    <>
          <VerifyRibbonComponent
            gotoOTP={gotoVerifyScreen}
          />
    </>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:18:02