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

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端