React路由笔记(函数组件,自用)

2024-06-20 14:12

本文主要是介绍React路由笔记(函数组件,自用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

配置

npm i react-router-dom

基本使用

目录结构

在src中创建page文件夹放置各页面组件,router中放置路由
目录结构

1、router中配置路由

/router/index.js中,使用createBrowserRouter配置路由。

import { createBrowserRouter } from "react-router-dom";import Login from '../page/Login';
import Article from "../page/Article";const router = createBrowserRouter([{path: '/login',element: <Login/>},{path: 'Artical',element: <Article/>}
])export default router;

2、在使用路由组件的地方包裹(这里在index.js中)

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';import { RouterProvider } from 'react-router-dom';
import router from './router';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<React.StrictMode><RouterProvider router={router}></RouterProvider></React.StrictMode>
);
reportWebVitals();

3、路由跳转

3.1 声明式导航

引入Link标签,包裹需要导航的按钮,使用参数to绑定需要跳转到的路由

3.2 编程式导航

使用useNavigate钩子。这个比较灵活,可以在js代码中写

二者的用法

import React from 'react';
import { Link, useNavigate } from 'react-router-dom';const Login = () => {const navigate = useNavigate()return (  <React.Fragment><div>登录页</div>{/* 声明式 */}<Link to="/article">跳转到文章页</Link>{/* 编程式 */}<button onClick={()=> navigate('/article')}>跳转到文章页</button></React.Fragment>);
}export default Login;

4 传参

4.1 searchParams传参

传参使用?key1=value1&key2=value2
接收参数时,用useSearchParams钩子

import React from 'react';
import { Link, useNavigate } from 'react-router-dom';const Login = () => {const navigate = useNavigate()return (  <React.Fragment><div>登录页</div><Link to="/article?id=123&name=test">跳转到文章页(带参数)</Link><button onClick={()=> navigate('/article/1001')}>跳转到文章页(params传参)</button></React.Fragment>);
}export default Login;

接受参数

import React from 'react';
import { useSearchParams } from 'react-router-dom';const Article = () => {const [params] = useSearchParams();const id = params.get('id');const name = params.get('name')return ( <div>文章页<div>id: {id},name: {name}</div></div> );
}export default Article;

4.2 params传参

传参时,/article/1001
接收时,用useParams钩子
这种传参需要在route中加上参数声明

import { createBrowserRouter } from "react-router-dom";import Login from '../page/Login';
import Article from "../page/Article";const router = createBrowserRouter([{path: '/login',element: <Login/>},{path: '/article/:id',element: <Article/>}
])export default router;

传参同理,接收代码如下

import React from 'react';
import { useParams, useSearchParams } from 'react-router-dom';const Article = () => {// const [params] = useSearchParams();// const id = params.get('id');// const name = params.get('name')const params = useParams();const id = params.id;return ( <div>文章页<div>id: {id},</div></div> );
}export default Article;

5、嵌套路由

1、在router中使用children配置子路由

import { createBrowserRouter } from "react-router-dom";import Layout from "../page/Layout";
import Board from "../page/Board";
import About from "../page/About";const router = createBrowserRouter([{path: '/',element: <Layout/>,children: [{path: 'board',element: <Board/>},{path: 'about',element: <About/>}]}
])export default router;

2、使用<Outlet/>组件配置二级路由的位渲染置
例如,根组件是<Layout/>,在Layout中:

import { Link, Outlet } from "react-router-dom";const Layout = () => {return ( <div><div>一级路由</div><div><Link to="/board">面板</Link></div><div><Link to="/about">关于</Link></div>{/* 配置二级路由的出口 */}<Outlet/></div>);
}export default Layout;

若需要二级路由的默认展示页,则在router中不添加path,增加index: true即可。例:

import { createBrowserRouter } from "react-router-dom";import Layout from "../page/Layout";
import Board from "../page/Board";
import About from "../page/About";const router = createBrowserRouter([{path: '/',element: <Layout/>,children: [{index: true,element: <Board/>},{path: 'about',element: <About/>}]}
])export default router;

同时,<Link/>中的to也需要同步更改为/
此时,<Board/>默认显示

6、404配置

在路由表的末尾配置

  {path: '*',element: <NotFound/>}

7、路由模式设置

配置路由时,用createBrowserRouter就是history路由,用createHashRouter是hash路由,其他一致。

import { createBrowserRouter } from "react-router-dom";   // history路由
import { createHashRouter } from "react-router-dom";  // hash路由const router = createHashRouter([])export default router;

这篇关于React路由笔记(函数组件,自用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078358

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1