当前位置: 首页 > news >正文

React---day12

15、react-route

主要是提供了一些组件:

15.1 Route:

Route用于路径的匹配;

  • path属性:用于设置匹配到的路径;
  • omponent属性:设置匹配到路径后,渲染的组件;
  • exact:精准匹配,只有精准匹配到完全一致的路径,才会渲染对应的组件

15.2 Link以及NavLink

  • 通常路径的跳转是使用Link组件,最终会被渲染成a元素;

  • NavLink是在Link基础之上增加了一些样式属性;

    添加自定义样式activeClassName已经被放弃了,现在是动态添加class

     className={({ isActive }) => (isActive ? "link-active" : "")}
    

    exact:是否精准匹配,在 React Router v6 及以上版本已经不再使用

  • to属性:Link中最重要的属性,用于设置跳转到的路径;

15.3 Routes

react-router中只要是路径被匹配到的Route对应的组件都会被渲染;

  • 匹配当前 URL,只渲染第一个匹配的 <Route>
  • 替代了 v5 里的 <Switch>,并且只能包裹 <Route><React.Fragment>
  • 让路由跳转和嵌套路由更简单、性能更好。

15.4 Navigate

<Navigate /> 是 React Router v6 及以上版本中用于重定向的组件。

  • 当组件渲染 <Navigate to="/login" /> 时,页面会自动跳转到 /login 路由。

举个例子:user页面如果登录了就显示用户名字,如果没有就要跳转到登录界面

export default class User extends PureComponent {constructor(props) {super(props);this.state = {username: 'Guest',isLogin: true};}render() {// 重定向的应用:如果是登录状态,则显示用户名,否则重定向到登录页return this.state.isLogin ? (<div><h2>User Page</h2><p>Username: {this.state.username}</p><p>Status: {this.state.isLogin ? 'Logged In' : 'Logged Out'}</p></div>) : <Navigate to="/login" />;}
}

15.5 路由的嵌套

举个例子:关于下面的子路由

在这里插入图片描述

主要步骤:

1、父组件配置子路由:

 <Route path="/about/*" element={<About />} />

/*:配置子路由

2、NavLink:

 <NavLinkto="/about"endclassName={({ isActive }) => (isActive ? "about-link" : "")}>企业历史</NavLink><NavLinkto="/about/culture"className={({ isActive }) => (isActive ? "about-link" : "")}>企业文化</NavLink><NavLinkto="/about/contact"className={({ isActive }) => (isActive ? "about-link" : "")}>联系我们</NavLink>
  • 这里使用的是绝对路径,使用相对路径会出现路径的叠加
  • 默认路由要添加end,因为我们使用的是绝对路径,不添加end就是模糊匹配了,这样的话默认路由一直有样式。end 属性的作用是:只有当前路径完全等于 to 的值时才激活该链接。

3、配置Routes

 <Routes>{/* 默认子路由填写index */}{/* 使用相对路径 */}<Route index element={<History />} /><Route path="culture" element={<Culture />} /><Route path="contact" element={<Contact />} /></Routes>

这里要使用相对路径了

默认路由添加index,index用于设置父路由下的默认子页面。

15.6 参数传递

动态路由的方式:

NavLink:拼接字符串,注意是路径参数/about/bcd/name=${name}

     <NavLink to={`/about/bcd/name=${name}`} state={{ from: "about" }} replace>bcd</NavLink>

Route: :name

 <Route path="bcd/:name" element={<Bcd />} />

获取参数:

import { useParams } from "react-router-dom";export default function Bcd() {console.log("Bcd组件渲染");const { name } = useParams(); // 正确获取路由参数console.log(name);return <h2>Detail页面,name: {name}</h2>;
}

个人觉得函数组件获取要方便一点,获取参数更简单、代码更现代。

15.7 v6 推荐的路由配置方式

  1. 直接用 和 组件(你现在的写法就是 v6 推荐方式)
  2. 或者用 useRoutes 实现配置式路由

相关文章:

  • SpringBoot自动化部署实战
  • 生成xcframework
  • <7>-MySQL内置函数
  • 51c嵌入式※~电路~合集32~PWM
  • BERT情感分类
  • BERT 位置嵌入机制与代码解析
  • Python 自动化临时邮箱工具,轻松接收验证码,支持调用和交互模式(支持谷歌gmail/googlemail)
  • ffmpeg 新版本转码设置帧率上限
  • 《通信之道——从微积分到 5G》读书总结
  • SkyReels-V1:开启多模态视频生成的新纪元
  • Flutter 多版本管理工具 Puro ,它和 FVM 有什么区别?
  • Flutter:弹窗UI,不带背景色,自定义图片的弹窗
  • 安装 docker-ce 时 错误:缺少container-selinux >= 2:2.74 错误:缺少 libcgroup
  • PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
  • 零基础学前端-传统前端开发(第二期-HTML介绍与应用)(XSS防御)
  • JxBrowser 8.8.0 版本发布啦!
  • 【HarmonyOS 5】鸿蒙CodeGenie AI辅助编程工具详解
  • 鹰盾加密器系统黑屏问题的深度解析与处理机制
  • SDC命令详解:使用uniquify命令进行唯一化
  • python第48天打卡
  • 免版权图片网站/快速排名程序
  • 网站主体必须要与域名注册人相同/加强网络暴力治理
  • wordpress 全文/如何点击优化神马关键词排名
  • 龙华做手机网站建设/杭州网络推广
  • 旅游景点网页制作/培训优化
  • php做网站多少钱/廊坊seo整站优化软件