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.mzph.cn/news/614463.shtml

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

相关文章

机器人领域顶刊TRO,TASE及RAL的区别与关系

一、背景 机器人领域越来越火&#xff0c;特别是具身智能的加持&#xff0c;让机器人在不久的未来可以完成更多复杂的任务&#xff0c;进入到我们的生活&#xff08;不过应该还需要很长时间&#xff09;。作为机器人方向的研究僧&#xff0c;我们会看到许多机器人期刊&#xf…

Semaphore信号量详解

在Java并发编程中&#xff0c;Semaphore是一个非常重要的工具类。它位于java.util.concurrent包中&#xff0c;为我们提供了一种限制对临界资源的访问的机制。你可以将其视为一个同步控制的瑞士军刀&#xff0c;因为它既能够控制对资源的并发访问数量&#xff0c;也能够保证资源…

2000-2021年全国各省环境相关指标数据(890+指标)

2000-2021年全国各省环境相关指标数据&#xff08;890指标&#xff09; 1、指标时间&#xff1a;2000-2021年 2、范围&#xff1a;31省市 3、来源&#xff1a;2001-2022年环境统计年鉴 4、指标&#xff1a;工业废水排放总量、工业废水排放达标量、工业废水处理量、化学需氧…

C语言代码 转换ASCII码为对应字符

转换以下ASCII码为对应字符并输出它们&#xff0c; 73,32,99,97,110,32,100,111,32,105,116,33 代码示例&#xff1a; #include <stdio.h>int main() {int arr[] { 73,32,99,97,110,32,100,111,32,105,116,33 };int i 0;int sz sizeof(arr) / sizeof(arr[0]);whil…

【野火i.MX6ULL开发板】开发板连接网络(WiFi)与 SSH 登录、上电自动登录、设置静态IP、板子默认参数

0、前言 参考之前自己写的&#xff1a; http://t.csdnimg.cn/g60P8 参考资料&#xff1a; [野火]《Linux基础与应用开发实战指南——基于i.MX6ULL开发板》_20230323 从野火官网下载 参考博客&#xff1a; http://t.csdnimg.cn/8uh4O 参考官方文档&#xff1a; https://doc.…

java 将json数据转为model

将json数据转为自己的实体model 要转化&#xff0c;首先要明白自己拿到的json是什么格式&#xff0c;想要转换为什么格式 json中 map&#xff08;以{}包着&#xff09;就是一个对象&#xff0c;list&#xff08;以[]包着&#xff09;就是一个数组 看清楚自己的json数据结构是否…

C++力扣题目257--二叉树的所有路径

给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","1->3"]示例 …

Redis:原理速成+项目实战——Redis实战10(Redis消息队列实现异步秒杀)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战9&#xff08;秒杀优化&#xff09; &#x1f4da;订阅专栏&#xff1a;Redis&…

Eureka切换Nacos时发现两个注册中心的解决方法

报错信息如下&#xff0c;意思是发现了两个注册中心 Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found: - nacosAutoServiceRegistration: defined…

数学经典教材有什么?

有本书叫做《自然哲学的数学原理》&#xff0c;是牛顿写的&#xff0c;读完之后你就会感叹牛顿的厉害之处! 原文完整版PDF&#xff1a;https://pan.quark.cn/s/5d5eac2e56af 那玩意真的是人写出来的么… 现代教材把牛顿力学简化成三定律&#xff0c;当然觉得很简单。只有读了原…

【高等数学之不定积分】

一、什么是不定积分? 我们可以简单地从英文层面来基础剖析一下&#xff0c;什么是不定积分? 1.1、基本概念 小tips: 二、不定积分运算法则 三、常用积分公式 四、第一类换元积分法 4.1、定义 4.2、常用凑微分公式 4.3、小calculate 五、第二类换元积分法 5.1、定义 …

JQuery异步加载表格选择记录

JQuery异步加载表格选择记录 JQuery操作表格 首先在页面中定义一个表格对象 <table id"insts" class"table"><thead><tr><th>列1</th><th>列2</th><th>例3</th><th></th></tr>…

Doris 数据模型—Duplicate 模型

Doris 数据模型—Duplicate 模型 文章目录 Doris 数据模型—Duplicate 模型有排序的 Duplicate 模型无排序列 Duplicate 模型总结这是我们关于Doris 数据模型 的最后一节,也就是说到这里我们关于Doris 数据模型介绍就完了,其实Duplicate 模型模型的主要业务场景就是业务上数据…

vue-计算属性

介绍&#xff1a; 在JavaScript中&#xff0c;计算属性&#xff08;Computed Property&#xff09;是一种特殊类型的属性&#xff0c;其值是根据其他属性的值动态计算出来的。计算属性的名称通常以方括号 [] 包围&#xff0c;并且它们的值是根据一个或多个其他属性的值计算得出…

java常见面试题:如何使用Java进行文件操作?

在Java中&#xff0c;你可以使用java.io包中的类来进行文件操作。下面是一些常见的文件操作&#xff0c;我会详细解释并提供相应的示例代码。 读取文件 使用java.io.FileReader和java.io.BufferedReader来读取文本文件。 java复制代码 import java.io.BufferedReader; impor…

CodeParrot数据集

CodeParrot 是一个用于研究和开发自然语言编程接口的数据集。这个数据集包含了大量的编程任务以及与之对应的自然语言描述&#xff0c;这些描述可以被用来训练和评估自然语言理解&#xff08;NLU&#xff09;和代码生成模型。CodeParrot 数据集的目标是促进研究者在自然语言编程…

基于51单片机的万年历系统设计

标题&#xff1a;基于单片机的万年历系统设计与实现 摘要&#xff1a; 本文主要研究和实现了基于51系列单片机&#xff08;如AT89S51&#xff09;为核心的电子万年历系统的设计方案。系统通过集成DS1302时钟芯片作为实时时间基准&#xff0c;结合液晶显示模块、按键输入模块及…

国际化翻译系统V2正式上线了

1、前言 之前上线了移动端国际化翻译系统V1版本&#xff0c;其中有一些弊端&#xff0c;例如&#xff1a; 1、项目仅能适用于Android和iOS项目&#xff0c;针对前端项目&#xff0c;Flutter项目&#xff0c;和后端项目无法支持2、之前的桌面程序需要搭建本地java环境才能运行…

基于 NFS 的文件共享实现

NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;它允许网络中的计算机之间通过 TCP/IP 网络共享文件资源&#xff0c;服务端通过 NFS 共享文件目录&#xff0c;客户端将该文件目录挂载在本地文件系统中&#xff0c;就可以像操作本地文件一样读写服务…

PostgreSQL 配置文件、数据储存目录

文章目录 查询配置文件所在位置查询数据储存目录PostgreSQL的数据目录 查询配置文件所在位置 show config_file; -- 查询配置文件所在位置查询数据储存目录 show data_directory; -- 查询数据储存目录PostgreSQL的数据目录 在PostgreSQL的数据目录&#xff08;C:\Program…