React【Day4】

ops/2024/10/21 11:44:16/

路由快速上手

1. 什么是前端路由

一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染
在这里插入图片描述

2. 创建路由开发环境

# 使用CRA创建项目
npm create-react-app react-router-pro# 安装最新的ReactRouter包
npm i react-router-dom# 启动项目
npm run start

3. 快速开始

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根目录的index.js

import React from 'react'
import ReactDOM from 'react-dom/client'
import { createBrowserRouter, RouterProvider } from "react";
const router = createBrowserRouter([{path:'/login',element: <div>登录</div>},{path:'/article',element: <div>文章</div>}
])ReactDOM.createRoot(document.getElementById('root')).render(<RouterProvider router={router}/>
)

抽象路由模块

在这里插入图片描述
views/ Article/index.js

const Article = () => {return <div>Article</div>;
};export default Article;

router/ index.js

import Login from "../views/Login/index";
import Article from "../views/Article/index";import { createBrowserRouter, RouterProvider } from "react-router-dom";const router = createBrowserRouter([{path: "/login",// element: Login,  // 这样写不对!!!!!element: <Login />,},{path: "/Article",element: <Article />,},
]);export default router;

index.js

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { createBrowserRouter, RouterProvider } from "react-router-dom";import router from "./router/index";const root = ReactDOM.createRoot(document.getElementById("root"));root.render(<RouterProvider router={router}></RouterProvider>);

路由导航

1. 什么是路由导航

路由系统中的多个路由之间需要进行路由跳转,并且在跳转的同时有可能需要传递参数进行通信
在这里插入图片描述

2. 声明式导航

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

在这里插入图片描述

import { Link, useNavigate } from "react-router-dom";import { Link, useNavigate } from "react-router-dom";
const Login = () => {const navigate = useNavigate();return (<div>login{/* <link to="/article">跳转到文章</link>  不是这个link */}{/* 这样写才对 */}<Link to="/article/slx/js">跳转到文章</Link></div>);
};export default Login;

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

3. 编程式导航

编程式导航是指通过 useNavigate 钩子得到导航方法,然后通过调用方法以命令式的形式进行路由跳转,比如想在登录请求完毕之后跳转就可以选择这种方式,更加灵活

在这里插入图片描述

语法说明:通过调用navigate方法传入地址path实现跳转

导航传参

在这里插入图片描述

1. searchParams传参 ( ?name=slx

Login.js

import { useNavigate } from "react-router-dom";
const Login = () => {const navigate = useNavigate();return (<div>login{/* 声明式导航 */}{/* <link to="/article">跳转到文章</link> */}{/* 命令式导航 */}<buttononClick={() => {navigate("/article?name=slx&code=js");}}>跳转到文章{" "}</button></div>);
};export default Login;

Article.js

import { useSearchParams } from "react-router-dom";
const Article = () => {// 从数据中解构paramsconst [params] = useSearchParams();const name = params.get("name");console.log("name", name);const code = params.get("code");console.log("code", code);return <div>Article</div>;
};export default Article;

params传参 ( /slx + 路由配置

在这里插入图片描述

多种参数情况:

Login.js

import { useNavigate } from "react-router-dom";
const Login = () => {const navigate = useNavigate();return (<div>login<buttononClick={() => {navigate("/article/slx/js");}}>跳转到文章{" "}</button></div>);
};export default Login;

Article.js

import { useSearchParams, useParams } from "react-router-dom";
const Article = () => {// 从数据中解构paramsconst params = useParams();const name = params.name;console.log("name", name);const code = params.code;console.log("code", code);
};export default Article;

router / index.js

 {path: "/Article/:name/:code",element: <Article />,},

嵌套路由配置

1. 什么是嵌套路由

在一级路由中又内嵌了其他路由,这种关系就叫做嵌套路由,嵌套至一级路由内的路由又称作二级路由,例如:
在这里插入图片描述

2. 嵌套路由配置

实现步骤

  1. 使用 children属性配置路由嵌套关系
  2. 使用 <Outlet/> 组件配置二级路由渲染位置

在这里插入图片描述
router.js

import Login from "../views/Login/index";
import Article from "../views/Article/index";
import Layout from "../views/Layout/index";
import Board from "../views/Board/index";
import About from "../views/About/index";import { createBrowserRouter, RouterProvider } from "react-router-dom";const router = createBrowserRouter([{path: "/children",element: <Layout />,children: [{// path: "/board", //报错!!  绝对路径 "/board" 被嵌套在路径 "/children" 下面,这是不合法的,// 绝对子路径必须从其所有父路由的组合路径开始。// path: "/children/board", // 都写成绝对路径,可以path: "board", // 改为相对于 "/children" 的路径,可以element: <Board />,},{path: "/children/about",element: <About />,},],},{path: "/login",// element: Login,  // 这样写不对!!!!!element: <Login />,},{path: "/article/:name/:code",element: <Article />,},
]);export default router;

Layout / index.js

import { Outlet, Link } from "react-router-dom";const Layout = () => {return (<div>一级路由Layout{/* <Link to="children/about">关于</Link> 这样写不对,地址变成这个啦: http://localhost:3000/children/children/about */}<Link to="/children/about">关于</Link><Link to="/children/board">面板</Link><Outlet></Outlet></div>);
};
export default Layout;

3. 默认二级路由

当访问的是一级路由时,默认的二级路由组件可以得到渲染,只需要在二级路由的位置去掉path,设置index属性为true

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. 404路由配置

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

实现步骤:

  1. 准备一个NotFound组件
  2. 在路由表数组的末尾,以*号作为路由path配置路由

在这里插入图片描述

5. 俩种路由模式

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

路由模式url表现底层原理是否需要后端支持
historyurl/loginhistory对象 + pushState事件需要
hashurl/#/login监听hashChange事件不需要

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/ops/18976.html

相关文章

Kotlin语法快速入门-函数(4)

Kotlin语法快速入门-函数&#xff08;4&#xff09; 文章目录 Kotlin语法快速入门-函数&#xff08;4&#xff09;四、函数1、函数定义2、infix关键字3、参数省略4、函数类型参数5、多参数--vararg 四、函数 1、函数定义 fun 函数名(参数: 类型) &#xff1a;返回值类型{//函…

【golang学习之旅】深入理解字符串string数据类型

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 目录 系列文章使用示例string的底层数据结构关于字符串复制字符串是不可变的如何高效的进行字符串拼接&#xff1f; 使用示例 Go 语言中的字符串只是一个只读的字节…

【数据结构(邓俊辉)学习笔记】向量03——无序向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

Python实现自动化的服务器部署和配置管理库之pyinfra使用详解

概要 在现代软件开发中,自动化部署和配置管理变得越来越重要。Python pyinfra库是一个强大的工具,可以帮助开发者实现自动化的服务器部署和配置管理。本文将介绍pyinfra库的安装、特性、基本功能、高级功能、实际应用场景以及总结。 安装 首先,来看一下如何安装pyinfra库。…

WordPress缓存插件有哪些?好用的缓存插件分享

目前WordPress缓存插件有&#xff1a;WP Rocket、WP Super Cache、W3 Total Cache、Sucuri、NitroPack、SiteGround Optimizer、LiteSpeed Cache、WP-Optimize、Hummingbird、Cache Enabler、Comet Cache。 在当今的数字世界中&#xff0c;拥有一个高效的网站对于吸引和留住用…

总结一期Redis

redis 好处 主要就是缓存热点数据的,减轻服务器压力, 在详情页还有单点登录都用到过. 我们在项目的活动模块用过,APP端的首页展示的数据都是使用redis存储的热点数据,因为用户进入APP的时候首先进入是首页,使用的hash数据类型存储首页信息. 为什么快 主要有这么几点,第一呢就re…

【动态规划】Leetcode 152. 乘积最大子数组【中等】

乘积最大子数组 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续 子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums [2,3,-2,4] 输出: 6 …

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统&#xff0c;需下载与安装的Elasticsearch相同版本的&#xff0c;下载完成后解压安装包。 配置Logstash配…