React的路由(ReactRouter)-路由导航跳转

news2025/1/16 16:59:08

1.第一步


// createBrowserRouter路由  RouterProvider组件
import {createBrowserRouter,RouterProvider} from 'react-router-dom'
// 创建router实例对象,并配置路由对应关系
const router=createBrowserRouter(
  [
    {
      path:'/login',
      element:<div>我是登录页</div>
    },
    {
      path:'/article',
      element:<div>我是文章页</div>
    }
  ]
)

2.第二部

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    {/* <App /> */}
    {/* 2.路由绑定 */}
    <RouterProvider router={router}></RouterProvider>
  </React.StrictMode>
);

全部

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';


// createBrowserRouter路由  RouterProvider组件
import {createBrowserRouter,RouterProvider} from 'react-router-dom'
// 创建router实例对象,并配置路由对应关系
const router=createBrowserRouter(
  [
    {
      path:'/login',
      element:<div>我是登录页</div>
    },
    {
      path:'/article',
      element:<div>我是文章页</div>
    }
  ]
)


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    {/* <App /> */}
    {/* 2.路由绑定 */}
    <RouterProvider router={router}></RouterProvider>
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

1.路由封装

整个路由到指定文件夹(Day4-02.ReactRouter-抽象路由模块_哔哩哔哩_bilibili)

文件夹修改结果如下

article.js内容  

function Article(){
    return <div>我是文章界面</div>
}
export default Article

login.js内容

function Login(){
    return <div>这是登录界面</div>
}
export default Login

router/index.js得内容

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

src文件夹下得index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

// 导入路由router
import router  from './router';
import {RouterProvider} from 'react-router-dom'



const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    {/* 2.路由绑定 */}
    <RouterProvider router={router}></RouterProvider>
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

路由导航跳转

import { Link } from "react-router-dom"
function Login(){
    return (
        <div>这是登录界面
            <Link to="/article">跳转文章页</Link>
        </div>
    )
}
export default Login

import { Link } from "react-router-dom"
import { useNavigate } from "react-router-dom"
function Login(){
    const navigate=useNavigate();
    return (
        <div>这是登录界面
            {/* 声明式写法 */}
            <Link to="/article">跳转文章页(标签跳转)</Link>
            {/* 命名式写法 */}
            <button onClick={()=>navigate('/article')}>编程式导航</button>
        </div>
    )
}
export default Login

3.路由导航传参

传参                        useSearchParams

路由配置

import Login from '../../src/page/login'
import Article from '../../src/page/article'
import { createBrowserRouter } from 'react-router-dom'
const router =createBrowserRouter([
    {
        'path':'/login',
        element:<Login/>
    },
    {
        'path':'/article',
        element:<Article/>
    }
])
export default router
// 标签Link
import { Link } from "react-router-dom";
// 钩子函数useNavigate
import { useNavigate } from "react-router-dom";
function Login() {
  const navigate = useNavigate();
  return (
    <div>
      这是登录界面
      <br></br>
      测试传参
      <br></br>
      {/* 声明式写法 */}
      <Link to="/article?id=1&name=理想">跳转文章页(标签跳转)</Link>
      {/* 命名式写法 */}
      <button onClick={() => navigate("/article?id=1&name=理想")}>
        编程式导航
      </button>
    </div>
  );
}
export default Login;

接收参数

import { useSearchParams } from "react-router-dom"



function Article(){
    const [params]= useSearchParams();
    const id=params.get('id');
    const name=params.get('name');

    return <div>我是文章界面--{id}--{name}</div>
}
export default Article

params传参

路由配置

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

// 标签Link
import { Link } from "react-router-dom";
// 钩子函数useNavigate
import { useNavigate } from "react-router-dom";
function Login() {
  const navigate = useNavigate();
  return (
    <div>
      这是登录界面
      
      测试传参
      <br></br>
      {/* 声明式写法 */}
      <Link to="/article/1/理想">跳转文章页(标签跳转)</Link>
      {/* 命名式写法 */}
      <button onClick={() => navigate("/article/1/理想")}>
        编程式导航
      </button>
    </div>
  );
}
export default Login;

import { useParams } from "react-router-dom"



function Article(){
    const params= useParams();
    const id=params.id;
    const name=params.name;

    return <div>我是文章界面--{id}--{name}</div>
}
export default Article

4嵌套路由

路由配置


import Layout from '../../src/page/Layout'
import Board from '../../src/page/Board'
import About from '../../src/page/About'



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

父级路由

import {Link, Outlet} from 'react-router-dom'

const Layout =()=>{
    return (
        <div>
            我是一级路由layout组件
            <br></br>
            <Link to="/board">面板</Link><br></br>
            <Link to="/about">关于</Link><br></br><br></br>

            {/* 二级路由得组件展示在这里 */}
            <Outlet style="margin-top:100px;margin-right:100px"></Outlet>

        </div>
    )
}
export default Layout

5.默认二级路由得配置(就是不跳转二级路由也要渲染出来)

    {
        'path':'/',
        element:<Layout/>,
        children:[
            {
                // 'path':'board',
                index:true,//只需要设置index为true,path去掉就行了
                element:<Board/>,
            }, {
                'path':'about',
                element:<About/>,
            }
        ]
    },
    

6.404路由配置

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

7.两种路由模式

主要换这两个方法就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

grafana 通过自定义API获取数据

一、安装插件 安装infinity插件 二、配置数据源 三、配置图表 1、数据 这边提供一个go的demo package mainimport ("math/rand""net/http""time""github.com/gin-gonic/gin" )func main() {router : gin.Default()rand.Seed(time.…

浅谈红队攻防之道-office文件免杀

最完美的状态&#xff0c;不是你从不失误&#xff0c;而是你从没放弃成长。 ∙菜单栏&#xff1a;集成了Cobalt Strike的所有功能。 ∙快捷功能区&#xff1a;列出了常用功能。 ∙目标列表区&#xff1a;根据不同的显示模式&#xff0c;显示已获取权限的主机及目标主机。 ∙…

“序列优化探究:最长上升子序列的算法发现与应用“

最长上升子序列 最长上升子序列是指在一个给定序列中&#xff0c;找到一个最长的子序列&#xff0c;使得子序列中的元素单调递增。例如&#xff0c;序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7]&#xff0c;长度为4。 这是一个经典的动态规划问题。 假设dp[i]表示…

day2-web安全漏洞攻防-基础-弱口令、HTML注入(米斯特web渗透测试)

day2-web安全漏洞攻防-基础-弱口令、HTML注入&#xff08;米斯特web渗透测试&#xff09; 1&#xff0c;漏洞2&#xff0c;弱口令3&#xff0c;爆破&#xff08;1&#xff09;Burpsuite&#xff08;2&#xff09;攻击类型 4&#xff0c;HTML针剂注入 1&#xff0c;漏洞 挖掘和利…

Adobe Photoshop图像处理软件下载安装,ps 2024版本安装包分享

Adobe Photoshop&#xff0c;这款业界闻名的图像处理软件&#xff0c;简称“PS”&#xff0c;以其强大的功能和广泛的应用领域&#xff0c;赢得了无数设计师、摄影师和创意工作者的青睐。 在Photoshop的世界里&#xff0c;用户能够随心所欲地对图像进行裁剪、缩放、调整色彩和…

Git 中 pull 操作和 rebase 操作的不同

由于在开发过程中&#xff0c;pull 操作和 rebase 操作都是用来合并分支的&#xff0c;所以我就常常分不清这两个操作具体有什么区别&#xff0c;所以才有了这篇博客来做个简单区分&#xff0c;具体细致差别还请移步到官方文档&#xff1a;Git - Reference (git-scm.com) 1&am…

怎么优化ArcEngine组件开发mfc程序界面?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

接口测试工作准备

前面已经讲了接口测试的原理&#xff0c;接下来讲接口测试如何准备。分为了解项目背景、收集项目相关资料、部署接口测试环境。明确接口测试相关成果物。接口测试采用的技术/工具。接口测试工作分工等。 1、了解项目背景 1、首先我们应该去了解项目的应用范围&#xff0c;了解…

报错:mAP数据为0%+无法读取output里的图片红色警告

debug检查&#xff1a;发现创建的output和input的路径不在同一级 操作1&#xff1a;修改output创建路径为绝对路径后&#xff0c;output和input文件成功在同一级&#xff0c;但问题仍存在 debug检测&#xff1a;识别的类别和保存的类别不同&#xff0c;没有保存数据 操作2&…

Python爬虫介绍

Python 作为一种广泛应用的编程语言&#xff0c;在 Web 开发、大数据开发、人工智能开发和嵌入式开发等领域都有着重要的应用。 Python 的易学性、清晰性和可移植性等特点使它得到很多技术人士的喜爱。对于数据科学和机器学习领域的程序员来说&#xff0c;Python 提供了强大的…

poi生成的excel,输入数字后变成1.11111111111111E+23

poi版本4.1.2 生成excel后&#xff0c;单元格输入数字&#xff0c;过长的话变成这样 解决&#xff1a;生成的时候设置单元格格式为文本格式 import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; imp…

【电路笔记】-共发射极放大器

共发射极放大器 文章目录 共发射极放大器1、概述2、完整的CEA配置3、直流等效电路4、交流等效电路5、输入阻抗6、输出阻抗7、电压增益8、微分电容的重要性9、信号源的衰减10、电流增益11、相位反转12、总结1、概述 在本文中,我们将介绍基于双极晶体管的放大器的最后一种拓扑:…

SQL注入-sqlmap使用

sqlmap简介 一款自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL的SQL注入漏洞&#xff0c;目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB Sqlma…

Day8 —— 大数据技术之HBase

HBase快速入门系列 HBase的概述什么是HBase&#xff1f;主要特点和功能包括使用场景 HBase的架构HBase部署与启动HBase基本操作前提条件数据库操作表操作数据的CRUD操作 HBase的不足 HBase的概述 什么是HBase&#xff1f; HBase 是一个开源的、分布式的、面向列的 NoSQL 数据…

食品预包装:舌尖安全的第一道防线

在当今快节奏的生活中&#xff0c;食品预包装不仅是保护食品的屏障&#xff0c;更是传递品质与美味的使者。 预包装首先展现出的是其保鲜的魔力。它宛如一层坚固的护盾&#xff0c;有效地阻隔外界因素对食品的侵蚀&#xff0c;让食品的新鲜度和口感得以长久保存。无论是酥脆的点…

本地离线模型搭建指南-RAG架构实现

搭建一个本地中文大语言模型&#xff08;LLM&#xff09;涉及多个关键步骤&#xff0c;从选择模型底座&#xff0c;到运行机器和框架&#xff0c;再到具体的架构实现和训练方式。以下是一个详细的指南&#xff0c;帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

Spring Boot+vue社区养老系统(智慧养老平台)

使用技术&#xff1a; springbootvueMySQL 主要功能&#xff1a; 管理员 登录个人资料密码管理, 用户管理:床位类型管理,床位管理,护工管理,老人管理 咨询登记管理&#xff0c;预约登记管理,老人健康信 息管理,费用管理等功能.护工角色包含以下功能: 护工登录&#xff0c;个…

工程师 - Total Phase公司介绍

Total Phase 是一家领先的嵌入式系统工具供应商&#xff0c;可简化各种通信协议的开发和调试。公司提供一系列产品&#xff0c;旨在帮助工程师和开发人员更高效地使用 I2C、SPI、USB 和 CAN 等协议。 关于Total Phase的关键信息&#xff1a; 产品&#xff1a; 协议分析仪&…

【Sklearn驯化-环境配置】一文搞懂sklearn建模的最优环境搭建用法

【Sklearn驯化-环境配置】一文搞懂sklearn建模的最优环境搭建用法 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信…

npm全局安装依赖指定存放文件目录

引言 学校机房&#xff0c;每次默认在c盘装完 电脑关机重启都得重新安装&#xff0c;十分麻烦 1-创建依赖安装/缓存目录 2-打开终端输入设置安装目录位置的命令 npm set cache \你创建的缓存文件目录\ npm set prefix \你创建的global全局安装依赖文件目录\至此以后npm -g 依…