React基础之ReactRouter

news/2025/3/9 8:53:11/

一个路径path对于一个组件component,当我们在浏览器中访问一个path的时候,path对于的组件会在页面中渲染

npm i react-router-dom

抽象路由模块

在src下创建一个router目录,创建一个index.js入口文件

import Login from "../page/Login";

import Article from "../page/Article";

import { createBrowserRouter } from "react-router-dom";

const router=createBrowserRouter([

    {

        path:'/login',

        element: <Login/>

    },

    {

        path:'/article',

        element: <Article/>

    }

])

export default router

page下创建不同的组件文件夹

Article下的index.js与Login下的index.js差不多

const Login=()=>{

    return <div>我是登录页</div>

}

export default Login

然后再src下的index.js入口文件中,使用该路由

import React from 'react';

import ReactDOM from 'react-dom/client';

import './index.css';

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();

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

路由导航

由一个组件跳转到另外一个组件

1.声明式导航

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

const Login=()=>{

    return(

        <div>

            我是登录页

            <Link to="/article">跳转到文章页</Link>

        </div>

     

    )

}

export default Login

2.编程式导航

调用useNavigate钩子得到导航方法,通过调用方法以命令式的形式进行路由跳转

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

const Login=()=>{

    const navigate=useNavigate()

    return(

        <div>

            我是登录页

            <button onClick={()=>navigate('/article')}>跳转到文章页</button>

        </div>

     

    )

}

export default Login

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

路由传参

方法1.saerchParams传参

传入参数

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

const Login=()=>{

    const navigate=useNavigate()

    return(

        <div>

            我是登录页

            <button onClick={()=>navigate('/article')}>跳转到文章页</button>

            <button onClick={()=>navigate('/article?id=1001&name=jack')}>searchParams传参</button>

        </div>

     

    )

}

export default Login

接收参数

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

const Article=()=>{

   const [params]= useSearchParams()

   const id=params.get('id')

   const name=params.get('name')

    return <div>我是文章页,{id},{name}</div>

}

export default Article

方法2 params传参

注意:需要在路由配置中设置对应的参数映射

传入参数

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

const Login=()=>{

    const navigate=useNavigate()

    return(

        <div>

            我是登录页

            <button onClick={()=>navigate('/article')}>跳转到文章页</button>

                 <button onClick={()=>navigate('/article/1001/jack')}>params传参</button>

        </div>

     

    )

}

export default Login

路由中配置映射

import Login from "../page/Login";

import Article from "../page/Article";

import { createBrowserRouter } from "react-router-dom";

const router=createBrowserRouter([

    {

        path:'/login',

        element: <Login/>

    },

    {

      path:'/article/:id/:name',

        element: <Article/>

    }

])

export default router

接收参数

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

const Article=()=>{

   const params= useParams()

   const id=params.id

   const name=params.name

    return <div>我是文章页,{id},{name}</div>

}

export default Article

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

路由嵌套

1.在路由配置中配置配置一级路由与它的Children

import Login from "../page/Login";

import Article from "../page/Article";

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.在一级路由处,配置二级路由出口

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

const Layout=()=>{

    return(

        <div>

            我是一级路由Layout

           

            <Link to="/board">面板</Link>

            <Link to="about">关于</Link>

        {/* 配置二级路由出口 */}

        <Outlet/>

        </div>

    )

}

export default Layout

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

默认二级路由配置

也就是已进入到这个一级路由,就会显示这个二级路由的渲染,但是路径不发生变化

index的路由配置为

import Login from "../page/Login";

import Article from "../page/Article";

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

一级路由Layout为

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

const Layout=()=>{

    return(

        <div>

            我是一级路由Layout

           

            <Link to="/">面板</Link>

            <Link to="about">关于</Link>

        {/* 配置二级路由出口 */}

        <Outlet/>

        </div>

    )

}

export default Layout

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

404路由配置

浏览器中的url路径在整个路由配置中找不到,我们就可以配置404兜底路由

1.设置一个NotFound组件

const NotFount=()=>{

    return (

        <div>页面消失了</div>

    )

}

export default NotFount

2.在路由配置中添加path为*的路由配置项

import Login from "../page/Login";

import Article from "../page/Article";

import { createBrowserRouter } from "react-router-dom";

import NotFount from "../page/NotFound";

const router=createBrowserRouter([

       {

        path:'*',

         element:<NotFount />

     }

])

export default router

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

两种路由模式

也有history与hash两种模式

只需要将之前使用的 createBrowserRouter 修改成

createHashRouter

import Login from "../page/Login";

import Article from "../page/Article";

import { createBrowserRouter, createHashRouter } from "react-router-dom";

import Layout from "../page/Layout";

import Board from "../page/Board";

import About from "../page/About";

import NotFount from "../page/NotFound";

const router=createHashRouter([

    {

        path:'/',

        element:<Layout />,

        children:[

            {

                // 默认二级路由设置

                index:true,

                element:<Board/>

            },

            {

                path:'about',

                element:<About/>

            }

        ]

    },

    {

        path:'/login',

        element: <Login/>

    },

    {

        path:'/article/:id/:name',

        element: <Article/>

    },

    {

        path:'*',

         element:<NotFount />

     }

])

export default router


http://www.ppmy.cn/news/1577774.html

相关文章

Kubernetes中的微服务

一、什么是微服务 在 Kubernetes 中&#xff0c;微服务是一种将应用拆分为独立、可扩展的小型服务的架构模式。每个微服务通常运行在独立的容器中&#xff0c;并通过网络进行通信。Kubernetes 提供了多种机制来管理和暴露这些微服务&#xff0c;使其能够高效地运行和扩展。 1…

小程序 wxml 语法 —— 37 setData() - 修改对象类型数据

这一节主要演示如何新增、修改和删除对象数据中单个/多个属性&#xff0c;我们直接使用微信开发者工具进行演示&#xff1b; 新增单个/多个属性 在 pages/cate/cate.js 中添加数据声明和对应的新增属性方法&#xff0c;如下&#xff1a; Page({// 在小程序页面中所需要使用的…

Vue3-vs-Vue2

Vue3 性能提升 与 Vue2.x 相比, mount 50% 提升, 内存占用小 120% Vue3 框架体积减少 核心代码 Composition API: 13.5kb, 最小 11.75kb所有 Runtime: 22.5kb (Vue2 是 32kb) Vue3 新特性 TS 重写 Diff 算法, 使用 Proxy 性能更优, 框架体积更小新的 Compiler, 通过注释标…

每日一题———面试

一、http和https的区别是什么&#xff1f; 区别主要有以下四点&#xff1a; 1.HTTP是超文本传输协议&#xff0c;信息是文明传输&#xff0c;存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷&#xff0c;在TCP和HTTP网络层之间加入SSL/TLS安全协议&#xff0c;使得报文能够加…

【数据仓库与数据挖掘基础】决策分析

一、数据仓库中的决策分析 1. 定义 决策分析在数据仓库中是指利用存储在数据仓库中的数据&#xff0c;通过分析和报告生成支持决策的信息。数据仓库整合了来自不同来源的数据&#xff0c;经过清洗和转换&#xff0c;提供了一个统一的视图&#xff0c;帮助管理层和决策者做出明…

vLLM + Open-WebUI 本地私有化部署 DeepSeek-R1-Distill-Qwen-32B 方案

一、vLLM 部署 DeepSeek-R1-Distill-Qwen-32B DeepSeek-R1-Distill 系列模型是 DeepSeek-R1 的蒸馏模型&#xff0c;官方提供了从 1.5B - 70B 不同尺寸大小的模型。特别适合在计算资源有限的环境中部署。 DeepSeek-R1 各个版本的蒸馏模型评估结果如下&#xff1a; 其中 DeepS…

使用浏览器插件GitZip一次性下载多个Github文件

在Edge插件商店中下载GitZip 在github中选择想要下载的文件 然后你会发现右下角一个黑箭头→&#xff0c;点击黑箭头&#xff0c;会出现提示&#xff1a; 你就按照它的提示来&#xff0c;点击GitZip的图标&#xff0c;接着会出现&#xff1a; 点击Private&#xff0c;然后按照…

Android 仿 DeepSeek 思考效果:逐字显示 AI 生成内容,支持加粗、颜色,复制内容

最近特别火的非AI莫属了&#xff0c;对我们高级搬运工太友好了&#xff0c;不管是网页端还是APP端&#xff0c;输入你要问的问题&#xff0c;都会逐字给你显示出来&#xff0c;有的还会加粗&#xff0c;这种效果看着不错&#xff0c;今天就带大家一起来实现。有啥更好的建议请在…