React【Day4】

server/2024/11/15 7:22:46/

路由快速上手

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/server/12111.html

相关文章

(mac)Promethues监控之mysqld_exporter(MySQL监控)

搭建Mysqld_exporterPrometheusGrafana监控系统 普罗米修斯是后端数据监控平台&#xff0c;通过Mysqld_exporter收集mysql数据&#xff0c;Grafana将数据用图形的方式展示出来 前提&#xff1a;已安装grafana和promethues 1.下载安装Mysql &#xff08;1&#xff09;启动MySQL…

小程序 前端如何用wx.request获取 access_token接口调用凭据

在微信小程序中&#xff0c;获取access_token通常是通过wx.request方法来实现的。以下是一个简单的示例代码&#xff1a; 1.获取小程序的appID 与 secret&#xff08;小程序密钥&#xff09; 登录之后,请点击左侧的"开发管理">点击"开发设置" 就可以找…

TiDB 6.x 新特性解读 | Collation 规则

对数据库而言&#xff0c;合适的字符集和 collation 规则能够大大提升使用者运维和分析的效率。TiDB 从 v4.0 开始支持新 collation 规则&#xff0c;并于 TiDB 6.0 版本进行了更新。本文将深入解读 Collation 规则在 TiDB 6.0 中的变更和应用。 引 这里的“引”&#xff0c;…

模拟电子技术实验(实验十一)

单选题 1. 本实验ICC视频二极管正向特性测试演示中&#xff0c;电流表选择的是以下哪种&#xff1a; A. AMMETER B. multimeter C. Agilent D. Voltmeter 答案&#xff1a;A 评语&#xff1a;5分 单选题 2. 本实验仿真AMMETER表的名称后缀HR和H的区别是什么&#xff1f…

(ChatGPT中文、吾爱Al、核桃、WeexAl地址发布页、ai创作、Chat中文)

目录 1、ChatGPT 中文 - Chat GPT 2、吾爱AI 3、 核桃 4、WeexAI 地址发布页 5、ai创作

景区ar导览实景导航小程序系统开发源码搭建

开发景区AR导览实景导航小程序系统需要以下步骤&#xff1a; 1. 确定需求和功能&#xff1a;根据景区AR导览实景导航的需求和功能&#xff0c;确定需要开发哪些功能模块&#xff0c;如AR实景导航、语音讲解、景点介绍、路线规划等。 2. 确定技术方案&#xff1a;选择适合的技…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面&#xff0c;同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具&#xff1a;uniapp开发小程序 1.3原型图 功能&#xff1a;.点击体验官带看跳转小程序的体验官带看页面 功能&#xff1a;点击立即咨询唤起小程序弹窗打电话 2.…

c# ?? 、?.、??=、?[]运算符的使用

在 C# 中存在一些特殊的运算符&#xff0c;它们简化了代码的编写&#xff0c;主要用于处理空值&#xff08;null&#xff09;或简化成员访问。以下是一些常用的这类运算符&#xff1a; ?? - Null 合并运算符 Null 合并运算符 ?? 在左侧的操作数不为 null 时返回左侧的操作…