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 实际项目场景。

相关推荐
我命由我123453 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_4 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
抱抱宝4 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
东风破_5 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc6 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne7 小时前
【ijkplayer】 硬解码流程
前端
kyriewen8 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩8 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒8 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔8 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端