首页 > 其他分享 >React — 路由

React — 路由

时间:2024-03-12 16:55:53浏览次数:26  
标签:react const element React path router 路由

一、路由的使用

1.安装react-router-dom

npm i react-router-dom 

2.配置

(1)创建router实例对象并且配置路由对应关系

(2)路由绑定

import {createBrowserRouter,RouterProvider} from 'react-router-dom'

//(1)创建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>
    {/* 路由绑定 */}
    <RouterProvider router={router}>

    </RouterProvider>
  </React.StrictMode>
);

二、路由模块封装

1.创建page文件夹

2.创建router文件夹

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

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

const router = createBrowserRouter([
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article',
        element : <Article></Article>
    }
])

export default router

3.应用入口文件渲染

import {createBrowserRouter,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>
);

三、路由导航

1.声明式导航

说明:声明式导航是指在模板中通过<Link/>组件描述要跳转到哪里

语法:<Link to=''/article''>跳转</Link>

使用场景:菜单

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

const Login = ()=>{
    return <>
        <div>
            Login页面
            <Link to="/article">跳转文章</Link>
        </div>
    
    </>
}
export default Login

2.编程式导航

说明:编程式导航是指通过‘useNavigate’钩子得到导航方法,然后通过调用方法以命令的形式进行路由跳转

语法:const navigate=uaeNavigate() navigate('/article')

使用场景:登录后跳转

import { Link,useNavigate } from "react-router-dom"
const Login = ()=>{
    const navigate = useNavigate()
    return <>
        <div>
            <button onClick={()=>navigate('/article')}>命令式跳转2</button>
        </div>
    </>
}
export default Login

四、导航传参

1.searchParams传参

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

//传参方:?分割参数 参数用&连接多个参数
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传参

const router = createBrowserRouter([
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article/:id/:name', //添加参数占位符
        element : <Article></Article>
    }
])
 <button onClick={()=>navigate('/article/1001/jack')}>params传参</button> //直接/+参数值
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>
    
    </>
}

五、嵌套式路由

1.实现步骤

(1)使用children属性配置路由嵌套关系

const router = createBrowserRouter([
    {
        path : '/',
        element : <Layout></Layout>,
        children :[{
            path : '/board',
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article/:id/:name',
        element : <Article></Article>
    }
])

(2)使用<Outlet/>组件配置二级路由渲染位置

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

const Layout= ()=>{
    return <>
        <div>
            我是一级组件Layout
        </div>
        <div>

            <Link to='/board'> 面板</Link>
            <Link to='/about'> 关于</Link>
        </div>
        {/* 配置二级路由的出口 */}
    
        <Outlet></Outlet>
    </>
}

export default Layout

2.默认二级路由

{
        path : '/',
        element : <Layout></Layout>,
        children :[{
            index:true, //1.加index:true
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
const Layout= ()=>{
    return <>
        <div>
            我是一级组件Layout
        </div>
        <div>
            <Link to='/'> 面板</Link> //2.路径修改/
            <Link to='/about'> 关于</Link>
        </div>
        {/* 配置二级路由的出口 */}
    
        <Outlet></Outlet>
    </>
}

六、404路由配置

说明:当浏览器输入url路径在整个路由配置中都找不到对应的path,为了用户体验,展示404进行渲染

const router = createBrowserRouter([
    {
        path : '/',
        element : <Layout></Layout>,
        children :[{
            index:true,
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
    {
        path : '*',
        element: <NotFound></NotFound>
    } //添加NotFound组件 使用*配置
])

七、路由模式

1.hash :由react-dom中 createHashRouter创建(底层:监听hashChange事件)

2.history:使用react-dom中 createBrowerRouter创建(底层:history对象+pushState事件)需要后端支持

 

标签:react,const,element,React,path,router,路由
From: https://www.cnblogs.com/qinlinkun/p/18068683

相关文章

  • 【设计模式】Reactor 模式简介
    如果你熟悉Java的23种设计模式,看到“Reactor模式”可能就会一脸懵逼,这是什么鬼。Reactor是一种应用在服务器端的开发模式(也有说法称Reactor是一种IO模式),目的是提高服务端程序的并发能力。Reactor模式它要解决什么问题呢?传统的threadperconnection用法中,线程在真......
  • react函数调用
    import*asReactfrom"react"//接收参数interfaceIProps{work?:string}interfaceState{//名字可以随便起date:string;//定义state的结构}exportdefaultclassHelloextendsReact.Component<IProps,State>{//组件初始化构......
  • Vue — 路由
    一、路由的使用步骤1.Vue2.0版本下载对应路由3.6.5版本yarnaddvue-router@3.6.5/npmivue-router@3.6.52.引入路由包importVueRouterfrom'vue-router';3.安装注册Vue.use(VueRouter)4.创建路由对象constrouter=newVueRouter()5.注入到newVue()中,与V......
  • ts跟react的学习点记录
    TS:1.ts与js的区别ts:js的超集用于解决大型项目的代码复杂性,可以在编辑期间发现并纠正错误,强类型,支持静态和动态类型,最终编译成js,使浏览器可以理解,支持模块、泛型和接口js:一种脚本语言,用于创建动态网页,作为一种解释型语言,只能在运行的时发现错误,不支持模块、泛型和接口react学习点:1......
  • c++从零实现reactor高并发服务器!!!
    环境准备linux虚拟机安装升级c/c++编译器gcc/g++选项源代码文件1源代码文件2...源代码文件n-o指定输出的文件名(不能和源文件同名默认是a.out)-g调试-On链接时优化减小体积(n=1-3)-c只编译用于生成库-std=c++11支持c++11标准安装man功能man级别接口......
  • ReactRouter 基础
    ReactRouter(路由)目录ReactRouter(路由)1、前端路由2、创建路由开发环境3、快速开始抽象路由模块路由导航1、路由导航2、声明式导航3、编程式导航路由导航传参searchParams传参params传参嵌套路由配置1、嵌套路由2、嵌套路由配置3、默认二级路由4、404路由配置5、2种路由模式1......
  • Django进阶之路由层和视图层
    Django的路由系统【1】什么是URL配置(URLconf)URL调度器|Django文档|Django(djangoproject.com)URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个U......
  • 动态路由,通过id改变,改页面
    原理不清楚,记录一下效果点击哪个页面展示哪个路由中{path:"/news",name:"news",children:[{path:"/news/:id",------------------------------------------这里固定name:"newsId",-----------------------......
  • 阿里云 同账号、同地域 ECS服务器,VPC对等连接具体设置操作(路由设置)
    阿里云ECS间内网通讯,在速度上有巨大优势。虽然阿里云文档资料比较全面,但是新手、尤其是是对网络不太熟悉的人设置起来还是有点难度的。又的朋友可能会出现:AECS服务器VPC网段设置为:172.17.0.0/16,BECS服务器VPC网段设置为:172.17.30.0/24这种情况时,按照阿里云资料咋操作也是不会成......
  • react面试2
    纯函数+不可变值 JSX的本质等同vue的模板createElement等同h函数第一个参数可能是组件也可能是tag,根据首字母大小写来区分是否是组件第二个参数是null或者{} 合成事件 为什么要这样使用?更好的兼容性和跨平台,尽量摆脱了DOM事件的逻辑,然后自己去实现一......