React之自定义路由组件

开篇

        react router功能很强大,可以根据路径配置对应容器组件。做到组件的局部刷新,接下来我会基于react实现一个简单的路由组件。

代码

自定义路由组件

import {useEffect, useState} from "react";
import React from 'react'
// 路由配置
export const MyRouter = ({children})=>{// 获取hash,当url中hash变更后会重新渲染const [hashVal] = useHash();// 获取路由组件let targetComponent = null;for (let component of children){if (component.props.path == hashVal){targetComponent = component;break;}}// 返回路由组件的内容return  targetComponent ? targetComponent.props.component : "Not Found"
}
// 路由項配置
export const Route = () => null;// 获取浏览器hash hook
const useHash = ()=>{const [hash,setHash]= useState(window.location.hash);useEffect(()=>{const handleHashChange = () => {setHash(window.location.hash);};// 注册hashChange事件window.addEventListener('hashchange', handleHashChange);return () => {window.removeEventListener('hashchange', handleHashChange);};},[])let hashVal = hash;if (hash.startsWith('#')){hashVal = hash.substr(1)}return [ hashVal]
}

app.js

import './App.css';
import {MyRouter,Route} from "./component/MyRouter";const App = ()=> {return (<div><div className="sider"><a href="#page1">Page 1</a><a href="#page2">Page 2</a></div><div className="page-container"><MyRouter><Route path="page1" component ={<span>我是1号</span>} /><Route path="page2" component ={<span>我是2号</span>} /></MyRouter></div></div>)
}

实现效果

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

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

相关文章

YOLOv8 Ultralytics:使用Ultralytics框架进行定向边界框对象检测

YOLOv8 Ultralytics&#xff1a;使用Ultralytics框架进行定向边界框对象检测 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行定向边界框对象检测参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精…

Kali Linux——aircrack-ng无线教程

目录 一、准备 二、案例 1、连接usb无线网卡 2、查看网卡信息 3、开启网卡监听 4、扫描wifi信号 5、抓取握手包 6、强制断开连接 7、破解握手包 三、预防 一、准备 1、usb无线网卡&#xff08;笔记本也是需要用到&#xff09; 2、密码字典&#xff08;Kali 系统自带…

好用便签:如何高效完成待办事项,提高工作效率?

在职场上&#xff0c;很多打工人总会有各种各样的待办事项需要处理&#xff0c;有时候因为手头上正在做的事还没做完&#xff0c;又接到一些其他的任务&#xff0c;导致不知道先做哪个&#xff0c;或者是忘了做某件事&#xff0c;导致工作效率极低。那么&#xff0c;如何高效处…

FineBI实战项目一(15):订单销售总额分析开发

点击新建组件&#xff0c;创建订单销售总额组件。 选择自定义图表&#xff0c;选择文本&#xff0c;拖拽要分析的字段到文本中。 进入仪表板&#xff0c;拖拽刚刚的组件进入仪表板&#xff0c;然后在再编辑标题。 效果如下

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件&#xff0c;创建每小时上架商品个数组件。 选择线图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到纵轴&#xff0c;拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

手写一个starter来理解SpringBoot的自动装配

自动装配以及简单的解析源码 自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开SpringBootApplication这个注解来一探究竟 点开这个注解可以发现这些 我们点开SpringBootConfiguration这个注解 可以发现实际上SpringBootApp…

C# 使用Fleck创建WebSocket服务器

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器&#xff0c;通过 WebSocket API&#xff0c;浏览器和服务器只需要做一个握手的动作&#xff0c;然后浏览器和服务器之间就形成了一条快速通道&#xff1b;两者之间…

深度学习笔记(三)——NN网络基础概念(神经元模型,梯度下降,反向传播,张量处理)

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 截图部分引用自北京大学机器学习公开课 人工智能算法的主流分类 首先明白一个概念&#xff0c;广义上的人工智能算法并不是只有Machine Learning或Deep …

什么牌子的洗地机清洁效果强?性能超好的洗地机推荐

随着生活品质的提高&#xff0c;家庭清洁也逐渐成为了人们生活中重要的一环。而传统的拖把方式已经无法满足人们对于清洁效果和舒适度的需求。因此&#xff0c;洗地机作为现代家庭清洁的利器受到了越来越多人的追捧。今天&#xff0c;我们将为大家带来几款清洁力强的、性能超好…

TS 36.331 V12.0.0-过程(4)-测量

​本文的内容主要涉及TS 36.331&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

【三】把Python Tk GUI打包exe可执行程序,移植到其他机器可用

背景 这是一个系列文章。上一篇【【二】为Python Tk GUI窗口添加一些组件和绑定一些组件事件-CSDN博客】 使用python脚本写一个小工具。因为命令行运行的使用会有dos窗口&#xff0c;交互也不是很方便&#xff0c;开发环境运行也不方便分享给别人用&#xff0c;所以想到…

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画&#xff0c;从以下角度&#xff0c;依据表格内容梳理&#xff0c;表格如下&#xff1a; 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…