前端路由快速上手-React-Router

ops/2024/10/18 19:33:28/

1. 前端路由简介

前端路由是一种在单页面应用(SPA)中实现页面跳转的技术,它允许我们通过改变URL地址而无需重新加载页面来显示不同的内容。在前端路由中,每个路径(path)都对应一个组件(component),当访问特定的路径时,对应的组件就会在页面上渲染。

2. 创建路由开发环境

要开始使用React Router,首先需要创建一个新的React应用,并安装React Router的DOM包。

# 使用Create React App创建项目
npx create-react-app react-router-pro# 安装React Router DOM包
npm install react-router-dom# 启动项目
npm run start

3. 快速开始

接下来,我们将创建一个简单的路由配置,定义两个路径:/login/article,分别对应登录页和文章页。

// 根index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { createBrowserRouter as createRouter, RouterProvider } from 'react-router-dom';// 创建router实例对象并配置路由对应关系
const router = createRouter([{path: '/login',element: <div>我是登录页</div>,},{path: '/article',element: <div>我是文章页</div>,},
]);ReactDOM.render(<React.StrictMode><RouterProvider router={router} /></React.StrictMode>,document.getElementById('root')
);

4. 抽象路由模块

为了使代码更加模块化,我们可以将每个页面组件抽象成单独的模块,然后在路由配置中引入它们。

// Article/index.js
const Article = () => <div>我是文章页</div>;
export default Article;// Login/index.js
const Login = () => <div>我是登录页</div>;
export default Login;// router/index.js
import Login from '../page/Login';
import Article from '../page/Article';
import { createRouter } from 'react-router-dom';const router = createRouter([{path: '/login',element: <Login />,},{path: '/article',element: <Article />,},
]);export default router;

5. 路由导航

路由导航是实现页面跳转的关键。React Router提供了两种导航方式:声明式导航和编程式导航。

5.1 声明式导航

声明式导航使用<Link>组件,它类似于HTML中的<a>标签,但专为React Router设计。

//login/index.js
import { Link } from 'react-router-dom';const Login = () => {return (<div>我是登录页<Link to="/article">去文章页</Link></div>);
};export default Login;

5.2 编程式导航

编程式导航使用useNavigate钩子,它提供了一个navigate函数,允许我们以编程的方式进行页面跳转。

//login/index.js
import { useNavigate, Link } from 'react-router-dom';const Login = () => {const navigate = useNavigate();return (<div>我是登录页<Link to="/article">去文章页</Link><button onClick={() => navigate('/article')}>跳转文章页</button></div>);
};export default Login;

6. 导航传参

在路由跳转时,我们经常需要传递参数。React Router支持通过查询字符串(search params)和路径参数(path params)传递参数。

//login/index.js
import { useNavigate, Link } from 'react-router-dom';const Login = () => {const navigate = useNavigate();return (<div>...<button onClick={() => navigate('/article?id=1001&name=张三')}>searchParam传参</button><button onClick={() => navigate('/article/1001/张三')}>Path传参</button></div>);
};export default Login;//router/index.js
// ... 省略其他路由配置
{path: '/article/:id/:name',element: <Article />,
}

7. 嵌套路由配置

嵌套路由允许我们在一级路由中嵌入其他路由,形成多级路由结构。

//layout/index.js
import { Link, Outlet } from "react-router-dom";const Layout = () => {return (<div>一级路由<Link to="/board">面板</Link><Link to="/about">关于</Link><Outlet /></div>);
};
export default Layout;// router/index.js
import Layout from '../page/Layout';
// ... 省略其他路由配置
const router = createRouter([{path: '/',element: <Layout />,children: [{path: 'board',element: <Board />,},{index: true,element: <About />,},],},// ... 404路由配置
]);

8. 默认二级路由和404路由配置

在路由配置中,我们可以设置默认的二级路由,以及当所有路由都不匹配时的404页面。

// router/index.js
// ... 省略其他路由配置
{path: '/',element: <Layout />,children: [// ... 其他二级路由配置{path: 'about',index: true, // 设置为默认二级路由element: <About />,},{path: '*',element: <NotFound />, // 404路由配置},],
}

9. 路由模式

React Router支持两种路由模式:history模式和hash模式,分别由createBrowserRoutercreateHashRouter函数创建。

  • history模式:URL表现为url/login,依赖HTML5 history对象的pushState事件,需要后端支持。
  • hash模式:URL表现为url/#/login,依赖监听hashChange事件,不需要后端支持。

以上就是前端路由的快速上手指南,希望对你有所帮助。


http://www.ppmy.cn/ops/86683.html

相关文章

Redis数据结构—跳跃表 skiplist

跳跃表&#xff08;skiplist&#xff09;是一种有序数据结构&#xff0c;它通过在每个节点中维护多个指针&#xff0c;从而实现快速的插入、删除和查找操作。跳跃表在Redis中被广泛用于实现有序集合&#xff08;sorted set&#xff09;和有序集合键&#xff08;sorted set key&…

【linux】Shell脚本三剑客之awk命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

面试面到自闭,字节软件测试岗五轮面试,四个小时灵魂拷问...

准备过程 我自己是本科毕业后在老东家干了两年多&#xff0c;老东家算是一家”小公司”(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身)&#xff0c;毕业这两年多我也没有在大厂待过&#xff0c;因此找坑的时候是非常非常虚的。迫于心慌&#xff0c;我好好思考了一阵来…

【Android】碎片—动态添加、创建Fragment生命周期、通信

简单用法 在一个活动中添加两个碎片&#xff0c;并让这两个碎片平分活动空间 先新建一个左侧碎片布局和一个右侧碎片布局 左侧碎片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

微信小程序-粘性组件

再次完善&#xff1a;将区域设置为粘性时&#xff0c;会脱离原有文档&#xff0c;使得出现下方页面突然遮盖一部分&#xff0c;不平滑 解决&#xff1a;给出一个新的空白区域&#xff0c;宽高与粘性区域一致&#xff0c;wx:if 控制其显示 /****************/ 后续补充&#…

c语言编写程序,找出出现次数最高的数字 数字范围1-1000 时间复杂度不超过O(n)

以下是一个C语言程序&#xff0c;使用O(n)的时间复杂度找出出现次数最高的数字&#xff1a; #include <stdio.h>int main() {int count[1001] {0}; // 用于记录每个数字出现的次数int maxNum -1; // 出现次数最高的数字int maxCount 0; // 最高出现次数// 输入数字…

谷粒商城实战笔记-71-商品服务-API-属性分组-前端组件抽取父子组件交互

文章目录 一&#xff0c;一次性创建所有的菜单二&#xff0c;开发属性分组界面1&#xff0c;左侧三级分类树形组件2&#xff0c;右侧分组列表3&#xff0c;左右两部分通信3.1 子组件发送数据3.2&#xff0c;父组件接收数据 Vue的父子组件通信父组件向子组件传递数据子组件向父组…

hadoop学习笔记2-hdfs

3.HDFS 3.1HDFS两类节点 namenode&#xff1a;名称节点datanode&#xff1a;数据节点 1.namenode 1&#xff09;namenode用来存储元数据&#xff0c;接收客户端的读写请求&#xff0c;namenode的元数据会分别保存在磁盘和内存中&#xff0c;保存到内存是为了快速查询数据信…