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

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高