ReactRouter使用详解(react-router-dom)

一、创建路由开发环境(使用路由采用CRA创建项目的方式进行基础环境配置)

一、创建路由开发环境(使用路由采用CRA创建项目的方式进行基础环境配置)
1. 创建项目并安装依赖
npx create-react-app react-router-pro
npm i

2. 安装最新的ReactRouter包
npm i react-router-dom

3. 启动项目
npm run start

二、项目内应用路由配置react-router-dom(目录结构如下图所示)

二、项目内应用路由配置react-router-dom(目录结构如下图所示)

1. src下创建page文件夹,page文件夹下创建两个页面,Login和Article

Login代码如下:

const Login = () => {
    return 
我是登录页
} export default Login; Article代码如下: const Article = () => { return
我是文章页
} export default Article; 2. src下创建router文件夹,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: }, { path: '/article', element:
} ]) export default router 3. 在React入口文件index.js引入并配置,代码如下: import React from 'react'; import ReactDOM from 'react-dom/client'; import { RouterProvider } from 'react-router-dom'; import router from './router' import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( );

目录结构如下:

ReactRouter使用详解(react-router-dom)_第1张图片

三、声明式路由导航

一、声明式路由导航
声明式导航是指通过在模板中通过组件描述出要跳到哪里去,比如后台管理系统的左侧菜单通常使用这种方式进行

语法说明:通过给组件的to属性指定要跳转到路由path,组件会被渲染为浏览器支持的a链接,如果需要传参直接通过字符串拼接的方式拼接参数即可

代码如下所示:
import { Link } from 'react-router-dom';

const Article = () => {
    return (
        
我是文章页
{/* 声明式写法 */} 跳转到登录页
) } export default Article;

四、命令式路由导航及传参

一、命令式路由导航

代码如下所示:

import { Link, useNavigate } from 'react-router-dom';

const Article = () => {
    const navigate = useNavigate();

    return (
        
{/* 命令式写法 */}
) } export default Article; 二、命令式路由导航传参方式: 1. searchParams传参 import { Link, useNavigate, useSearchParams } from 'react-router-dom' const Login = () => { const navigate = useNavigate(); // searchParams传参 const [params] = useSearchParams(); const id = params.get('id'); const name = params.get('name'); console.log(id, name); return (
) } export default Login; 2. params传参 第一步:router文件夹下index.js代码如下: import Login from '../page/Login'; import Article from '../page/Article'; import { createBrowserRouter } from 'react-router-dom'; const router = createBrowserRouter([ { path: '/login/:id/:name', element: }, { path: '/article/:id/:name', element:
} ]) export default router; 第二步:组件内应用代码如下: import { useParams, useNavigate } from 'react-router-dom'; const Article = () => { const navigate = useNavigate(); const params = useParams(); console.log(params); return (
) } export default Article;

五、嵌套路由

1. router文件夹下index.js代码如下:

import { createBrowserRouter } from 'react-router-dom';
import Laylout from '../page/Laylout';
import Login from '../page/Login';
import Article from '../page/Article';

const router = createBrowserRouter([
    {
        path: '/',
        element: ,
        children: [
            {
                // 设置默认二级路由配置,当地址为localhost:3000时默认显示这个二级路由组件
                index: true,
                element: 
            },
            {
                path: 'article',
                element: 
} ] } ]) export default router 2. 在组件内应用代码如下: import { Link, Outlet } from "react-router-dom"; const Laylout = () => { return (
我是layout组件 Login Article
{/* 配置二级路由出口 */}
) } export default Laylout;

六、404路由配置

场景:当浏览器输入url的路径在整个路由配置中都找不到对应的path,为了用户体验,可以使用404兜底组件进行渲染,使用方法如下:

1. router文件夹下index.js代码如下:

import { createBrowserRouter } from 'react-router-dom';
import Laylout from '../page/Laylout';
import Login from '../page/Login';
import Article from '../page/Article';
import NotFound from '../page/NotFound';

const router = createBrowserRouter([
    {
        path: '/',
        element: ,
        children: [
            {
                index: true,
                element: 
            },
            {
                path: 'article',
                element: 
} ] }, // 配置404路由组件 { path: '*', element: } ]) export default router

七、两种路由模式

两种路由模式:各个主流框架的路由常用的路由模式有两种,history模式和hash模式,ReactRouter分别由createBrowerRouter和createHashRouter函数负责创建

路由模式           url表现                      底层原理                     是否需要后端支持

history           url/login           history对象 + pushState事件                需要

hash              url/#/login             监听hashChange事件                    不需要



router文件夹下index.js代码如下:

import { createBrowserRouter, createHashRouter } from 'react-router-dom';
import Laylout from '../page/Laylout';
import Login from '../page/Login';
import Article from '../page/Article';
import NotFound from '../page/NotFound';

// 在这里配置,createHashRouter hash模式   createBrowserRouter history模式
const router = createBrowserRouter([
    {
        path: '/',
        element: ,
        children: [
            {
                index: true,
                element: 
            },
            {
                path: 'article',
                element: 
} ] }, { path: '*', element: } ]) export default router

你可能感兴趣的:(react.js)