react navite 页面跳转、传参、路由监听、导航栏自定义

如果你说的是 React Native + React Navigation(v6/v7) ,那么页面跳转、传参、路由监听、导航栏自定义是最核心的部分。


java 复制代码
npm install @react-navigation/native

npm install react-native-screens
npm install react-native-safe-area-context

npm install @react-navigation/native-stack

根组件:

javascript 复制代码
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

const Stack = createNativeStackNavigator();

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen
          name="Home"
          component={HomePage}
        />
        <Stack.Screen
          name="Detail"
          component={DetailPage}
        />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

2. 页面跳转

普通跳转

arduino 复制代码
navigation.navigate('Detail');

替换当前页面

类似 Vue Router replace

arduino 复制代码
navigation.replace('Detail');

返回上一页

ini 复制代码
navigation.goBack();

返回首页

ini 复制代码
navigation.popToTop();

3. 页面传参

发送参数

php 复制代码
navigation.navigate('Detail', {
  id: 1001,
  title: 'React Native'
});

接收参数

javascript 复制代码
function DetailPage({ route }) {

  const { id, title } = route.params;

  return (
    <Text>
      {id} - {title}
    </Text>
  );
}

TS类型定义

ini 复制代码
type RootStackParamList = {
  Home: undefined;
  Detail: {
    id: number;
    title: string;
  };
};

4. 返回时传参

详情页:

php 复制代码
navigation.navigate({
  name: 'Home',
  params: {
    refresh: true
  },
  merge: true,
});

首页:

scss 复制代码
useEffect(() => {
  if(route.params?.refresh){
    loadData();
  }
}, [route.params]);

5. 路由监听

页面获得焦点

最常用

javascript 复制代码
import { useFocusEffect } from '@react-navigation/native';

useFocusEffect(
  React.useCallback(() => {
    console.log('页面显示');

    return () => {
      console.log('页面隐藏');
    };
  }, [])
);

类似:

复制代码
onShow
onHide

focus监听

ini 复制代码
useEffect(() => {

  const unsubscribe =
    navigation.addListener('focus', () => {

      console.log('进入页面');

    });

  return unsubscribe;

}, [navigation]);

blur监听

ini 复制代码
useEffect(() => {

  const unsubscribe =
    navigation.addListener('blur', () => {

      console.log('离开页面');

    });

  return unsubscribe;

}, [navigation]);

6. 页面离开拦截

例如:

用户修改表单后未保存

ini 复制代码
useEffect(() => {

  const unsubscribe =
    navigation.addListener(
      'beforeRemove',
      (e) => {

        e.preventDefault();

        Alert.alert(
          '提示',
          '确定离开页面吗?'
        );
      }
    );

  return unsubscribe;

}, [navigation]);

7. 获取当前路由

ini 复制代码
import { useRoute } from '@react-navigation/native';

const route = useRoute();

console.log(route.name);

8. 自定义导航栏标题

静态方式

ini 复制代码
<Stack.Screen
  name="Detail"
  component={DetailPage}
  options={{
    title: '详情页'
  }}
/>

动态方式

scss 复制代码
useLayoutEffect(() => {

  navigation.setOptions({
    title: '用户详情'
  });

}, []);

9. 自定义返回按钮

ini 复制代码
navigation.setOptions({

  headerLeft: () => (
    <Button
      title="返回"
      onPress={() => navigation.goBack()}
    />
  )

});

10. 自定义右侧按钮

ini 复制代码
navigation.setOptions({

  headerRight: () => (

    <Button
      title="保存"
      onPress={saveData}
    />

  )

});

效果:

复制代码
← 返回      用户详情      保存

11. 完全自定义 Header

ini 复制代码
<Stack.Screen
  name="Detail"
  component={DetailPage}
  options={{
    header: () => (
      <CustomHeader />
    )
  }}
/>

12. Bottom Tab 导航

ini 复制代码
import {
  createBottomTabNavigator
} from '@react-navigation/bottom-tabs';

const Tab = createBottomTabNavigator();

<Tab.Navigator>

  <Tab.Screen
    name="Home"
    component={HomePage}
  />

  <Tab.Screen
    name="Mine"
    component={MinePage}
  />

</Tab.Navigator>

13. Tab 图标

ini 复制代码
<Tab.Screen
  name="Home"
  component={HomePage}
  options={{
    tabBarIcon: ({color,size}) => (
      <Icon
        name="home"
        color={color}
        size={size}
      />
    )
  }}
/>

14. Drawer 侧边栏

ini 复制代码
import {
 createDrawerNavigator
} from '@react-navigation/drawer';

const Drawer =
 createDrawerNavigator();

<Drawer.Navigator>
  <Drawer.Screen
    name="Home"
    component={HomePage}
  />
</Drawer.Navigator>

15. 企业项目常用导航结构

markdown 复制代码
NavigationContainer
│
├── AuthStack
│   ├── Login
│   └── Register
│
└── MainTab
    │
    ├── HomeStack
    │   ├── Home
    │   └── Detail
    │
    ├── MessageStack
    │
    └── MineStack

这种 Tab + Stack 嵌套 是 React Native 商业项目最常见的导航架构。

如果你正在准备 React Native 面试或项目开发,建议重点掌握:

  • Stack / Tab / Drawer 嵌套
  • TypeScript 路由类型约束
  • Deep Link(深链接)
  • 页面生命周期(focus、blur)
  • 状态管理(Redux Toolkit、Zustand)与导航联动
  • React Navigation 性能优化(懒加载、屏幕缓存)

这些基本覆盖了 90% 以上 React Native 实际项目场景。

相关推荐
const_qiu17 分钟前
第 2.5 章 2.5.6:前端登录、Token 无感续签与路由守卫
java·前端·人工智能·状态模式
用户831348593069826 分钟前
Vue3 事件:常用用法与开发高频坑点
前端·javascript·vue.js
weixin_4462608527 分钟前
ReAct‑Evolve:基于轨迹反馈的ReAct智能体自主提示演化系统
前端·react.js·前端框架
其实防守也摸鱼29 分钟前
存储管理:页面置换算法学习任务(测验题要求给出置换页面顺序,缺页次数,缺页率)
android·前端·数据库·学习·oracle·自动化
怒放的生命199140 分钟前
前端项目 Docker 打包实操指南
前端·docker·容器
tedcloud12342 分钟前
Docker Compose 部署 Immich:手机照片自动备份与常见故障排查
运维·前端·docker·容器·智能手机·开源·流程图
时间的情敌1 小时前
《WebGIS 前端的成长路线,三维可视化工程师需要掌握什么》
前端·状态模式
漫步人生走在路上1 小时前
用小语种SEO突破外贸B2B天花板:法语、德语市场的实测数据
开发语言·前端·javascript·人工智能·搜索引擎·ecmascript
变与不变8061 小时前
jQuery 核心语法与 jQuery AJAX
前端·ajax·jquery