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

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.两种路由模式

主要换这两个方法就行

相关推荐
瑞雨溪13 分钟前
怎么在vite项目中全局导入一个scss文件
前端·css·scss
xxx割喉23 分钟前
如何使用Vue.js实现动态文档生成与下载功能
前端·javascript·vue.js
Alphamilk31 分钟前
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
前端·vue.js·elementui
魔术师ID33 分钟前
vue2和vue3中实现点击复制粘贴功能
开发语言·前端·javascript·vue.js
HANG_WORLD1 小时前
fiddler抓包工具
前端·测试工具·fiddler
泉绮1 小时前
springboot+vue 开发记录(八) 前端项目打包
前端·vue.js·spring boot
生活、追梦者1 小时前
【Vue.js】 Mixin 局部混入与全局混入的介绍和使用总结以及优缺点分析
前端·javascript·vue.js
爱前端的小菜鸡1 小时前
uniapp + vite中 uni.scss 使用 /deep/ 不生效(踩坑记录三)
前端·uni-app·scss
非闲人1 小时前
使用命令行创建uniapp+TS项目,使用vscode编辑器
前端·uni-app
小菜翔2 小时前
Java中的四种访问权限控制符分别是什么?
前端·数据库·servlet