React Router 中常用的方法总结

在 React 中使用 React Router 可以实现类似于 Vue Router 的路由跳转、获取参数和编程式导航、获取路由对象等功能。以下是一些常用的方法:

  1. 编程式导航:您可以使用 useHistory 钩子进行编程式导航。以下是一个示例:
import { useHistory } from "react-router-dom";function HomeButton() {let history = useHistory();function handleClick() {history.push("/home");}return (<button type="button" onClick={handleClick}>回到首页</button>);
}
  1. 重定向:您可以使用 Redirect 组件将用户重定向到不同的页面。以下是一个示例:
import { Redirect } from "react-router-dom";function LoginPage() {// ... 登录逻辑return (<div>{isLoggedIn ? <Redirect to="/dashboard" /> : <LoginForm />}</div>);
}
  1. 前进或后退:您可以使用 useHistory 钩子中的 goBackgoForward 函数实现前进和后退。以下是一个示例:
import { useHistory } from "react-router-dom";function BackButton() {let history = useHistory();function handleClick() {history.goBack();}return (<button type="button" onClick={handleClick}>后退</button>);
}function ForwardButton() {let history = useHistory();function handleClick() {history.goForward();}return (<button type="button" onClick={handleClick}>前进</button>);
}
  1. 获取 URL 中的参数:您可以使用 useParams 钩子获取 URL 中的参数。以下是一个示例:
import { useParams } from "react-router-dom";function UserDetails() {let { userId } = useParams();return (<div><h1>User ID: {userId}</h1></div>);
}
  1. 获取路由信息对象:您可以使用 useRouteMatch 钩子获取有关路由的信息。以下是一个示例:
import { useRouteMatch } from "react-router-dom";function About() {let match = useRouteMatch();return (<div><h1>About</h1><p>You are now on the "About" page.</p><p>The URL matched is {match.path}.</p></div>);
}
  1. 嵌套路由:您可以使用 Route 组件的 path 属性和 children 属性创建嵌套路由。以下是一个示例:
import { Route, Switch } from "react-router-dom";function App() {return (<Switch><Route path="/admin" component={Admin}><Route path="/admin/dashboard" component={Dashboard} /><Route path="/admin/settings" component={Settings} /></Route></Switch>);
}
  1. 守卫路由:您可以使用 Route 组件的 render 属性或 useEffect 钩子来实现路由守卫。以下是一个示例:
import { Route, Redirect } from "react-router-dom";function PrivateRoute({ component: Component, ...rest }) {const isAuthenticated = // ... 检查用户是否已登录return (<Route{...rest}render={props =>isAuthenticated ? (<Component {...props} />) : (<Redirect to="/login" />)}/>);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第23次修改了可删除可持久保存的前端html备忘录:增加了百度引擎

第22次修改了可删除可持久保存的前端html备忘录视频背景分离&#xff0c;增加了本地连接&#xff0c;增加了纯CSS做的折叠隐藏修改说明 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport…

JVM-结合MAT工具分析OOM问题

JVM-结合MAT工具分析OOM问题 启动项目前配置VM参数 -XX:UseParNewGC -XX:UseConcMarkSweepGC -Xms1m #初始化大小 -Xmx1m #最大值 -XX:PrintGCDetails -Xloggc:gc_dandan.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./运行结果截图 使用MAT打开java_pid12164.hprof…

IDEA无法成功配置Tomcat的解决方法(IDEA版本问题)

在创建Servlet时&#xff0c;下载了Tomcat文件夹以及成功配置了环境变量之后&#xff0c;在IDEA中怎么都找不到Tomcat&#xff0c;尝试了网络中的各种方法&#xff0c;都不行&#xff0c;结果发现时IDEA版本的问题。因为我下的IDEA是社区版的&#xff0c;所以没有自带的Tomcat&…

Gitflow和元数据是什么

Gitflow 是一种基于 Git 的分支管理工作流程&#xff0c;旨在帮助团队更有效地管理软件开发过程中的版本发布、功能开发和修复 bug。它由 Vincent Driessen 在他的博客上首次提出&#xff0c;并已成为许多团队常用的工作流程模型之一。 Gitflow 工作流程主要包括以下几个关键分…

4.9日总结

1.MySQL概述 1.数据库基本概念&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 2.数据库管理系统&#xff1a;操纵和管理数据库的大型软件 3.SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作型数据库统一标准 2.MySQL数据库 关系型数…

运行gitHub中的vue项目,遇到三个报错解决方案

报错1&#xff1a;解决npm run serve启动报错npm ERR Missing script:"serve" 启动项目的时候用npm run serve发现报了以下的错误 npm ERR! Missing script: "serve" npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm runnpm ERR! A co…

03-JAVA设计模式-代理模式详解

代理模式 什么是代理模式 Java代理模式是一种常用的设计模式&#xff0c;主要用于在不修改现有类代码的情况下&#xff0c;为该类添加一些新的功能或行为。代理模式涉及到一个代理类和一个被代理类&#xff08;也称为目标对象&#xff09;。代理类负责控制对目标对象的访问&a…

ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

前言 ASP.NET Core 内置的标识&#xff08;identity&#xff09;框架&#xff0c;采用的是 RBAC&#xff08;role-based access control&#xff0c;基于角色的访问控制&#xff09;策略&#xff0c;是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…

openGauss学习笔记-259 openGauss性能调优-使用Plan Hint进行调优-指定不使用全局计划缓存的Hint

文章目录 openGauss学习笔记-259 openGauss性能调优-使用Plan Hint进行调优-指定不使用全局计划缓存的Hint259.1 功能描述259.2 语法格式259.3 示例 openGauss学习笔记-259 openGauss性能调优-使用Plan Hint进行调优-指定不使用全局计划缓存的Hint 259.1 功能描述 全局计划缓…

Windows下MySQL服务启动常见的两种方式,完美适配Mysql5.7,MySql8.0

文章目录 一、图形界面下启动mysql服务二、在命令行重新启动mysql服务三、推荐阅读四、源码获取&#xff1a; Windows系统下&#xff0c;MySQL服务的启动&#xff0c;常见的两种启动方式如下&#xff1a; 一、图形界面下启动mysql服务 在图形界面下启动mysql服务的流程如下&am…

雄安建博会:中矿雄安新区的总部开工建设

中矿落位雄安&#xff1a;助力国家战略与新区发展 雄安新区&#xff0c;作为中国未来发展的重要战略支点&#xff0c;正迎来一系列央企总部的疏解与建设。最近&#xff0c;中国矿产资源集团有限公司&#xff08;简称“中矿”&#xff09;在雄安新区的总部项目正式开工建设&…

leetcode628-Maximum Product of Three Numbers

题目 给你一个整型数组 nums &#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;6 分析 这道题目要求数组中三个数组成的最大乘积&#xff0c;由于元素有正数有负数&#xff…

0.Go的安装和基本语法

0.安装 0.1.下载安装包 https://golang.google.cn/dl/ linux下载go1.Xxx.Yyy.linux-amd64.tar.gz版本安装包 0.2.解压 tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz0.3.安装 修改/etc/profile文件&#xff0c; 添加一行 export PATH$PATH:/usr/local/go/bin或者修改…

Python 怎么将dict字典转换成json文件保存

文章目录 Python 怎么将dict字典转换成json文件保存1. json.dump&#xff08;&#xff09;2. with open("要打开的文件路径/保存的地址file_name", "w") as outfiles: Python 怎么将dict字典转换成json文件保存 1. json.dump&#xff08;&#xff09; 公…

C++设计模式:原型模式(八)

1、定义与动机 定义&#xff1a;使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 动机&#xff1a; 在软件系统中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变…

BUUCTF刷题十一道(12)附-SSTI专题二

文章目录 学习文章[CISCN2019 华东南赛区]Web11【存疑】[RootersCTF2019]I_<3_Flask 学习文章 SSTI-服务端模板注入漏洞 flask之ssti模板注入从零到入门 CTFSHOW SSTI篇-yu22x SSTI模板注入绕过&#xff08;进阶篇&#xff09;-yu22x SSTI模板注入学习-竹言笙熙 全部总结看最…

Chatgpt掘金之旅—有爱AI商业实战篇|在线辅导业务|(十一)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在线辅导业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着…

谷歌浏览器快捷键, VScode 快捷键

谷歌浏览器快捷键 谷歌浏览器跳转标签页的方式&#xff1a; control Tab 跳转下一个标签页 control shift tab 上一个标签页 command 1-8 跳转对应的标签页&#xff0c;而command 9 则是跳转最后一个标签页 Previous Tab 插件实现谷歌浏览器两个tab页来回切换。快捷键为…

稀碎从零算法笔记Day44-LeetCode:整数转罗马数字

题型&#xff1a;贪心、模拟 链接&#xff1a; 12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 …

网络名称空间在Linux虚拟化技术中的位置

网络名称空间&#xff08;Network Namespaces&#xff09;是Linux内核特性之一&#xff0c;提供了隔离网络环境的能力&#xff0c;使得每个网络名称空间都拥有独立的网络设备、IP地址、路由表、端口号范围以及iptables规则等。这一特性在Linux虚拟化技术中占据了核心位置&#…