React@16.x(40)路由v5.x(5)常见应用场景(2)- 实现类似 vue 的路由模式

目录

  • 1,vue-router
  • 2,React 模拟实现

1,vue-router

vue 的路由配置文件,

// src/router/index.ts
const routes = [{path: "/news",children: [{ path: "", component: NewsView },{ path: "detail", component: NewsDetail },{ path: "search", component: NewsSearch },],},{path: "/goods",component: GoodsView,children: [{ path: "detail", component: GoodsDetail },{ path: "search", component: GoodsSearch },],},{ path: "/", component: HomeView },
];

App.vue 中使用 RouterView 即可渲染匹配到的路由:

<template><RouterView></RouterView>
</template>

另外,注意 newsgoods 路由的区别:

  • news 相关的3个路由页面是相互独立的,只是逻辑上有关系。
  • goods 路由的写法,需要在 GoodsView 组件内也使用 RouterView 才能访问到路由 goods/detailgoods/search 对应的页面。
<template><div>goods主页面</div><RouterView></RouterView>
</template>

2,React 模拟实现

使用和 vue 相同的配置文件routeConfig.js

App.jsx

import { BrowserRouter as Router, Switch, Link } from "react-router-dom";
import RootRoute from "./RootRoute";export default function App() {return (<Router><Link to="/">首页</Link><Link to="/news">新闻页</Link><Link to="/goods">商品页</Link><Switch><RootRoute></RootRoute></Switch></Router>);
}

关键实现:RootRoute.js

import React from "react";
import { Route } from "react-router-dom";
import routeConfig from "./routeConfig";export default function RootRoute() {return getRoutes(routeConfig, "");
}function getRoutes(routes, basePath) {if (!Array.isArray(routes)) {return null;}return routes.map((route) => {const { path, component: Component, children, ...rest } = route;const newPath = `${basePath}${path}`;// 适配 news 路由的方式if (Component) {return (<Routekey={newPath}path={newPath}exact={["", "/"].includes(path)}{...rest}render={(values) => {return <Component {...values}>{getRoutes(children, newPath)}</Component>;}}></Route>);} else {return getRoutes(children, newPath);}});
}

News.jsx

export default function News() {return (<div><div>News页面</div><Link to="/news/detail">详情</Link><Link to="/news/search">查询</Link></div>);
}

Goods.jsx,其中 props.childrenRootRoute.js 遍历子路由渲染出对应的 <Route> 组件。

export default function Goods(props) {return (<div><div>Goods页面</div><Link to="/goods/detail">goods详情</Link><Link to="/goods/search">goods查询</Link><div>{props.children}</div></div>);
}

效果:

在这里插入图片描述


以上。

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

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

相关文章

瞄准Windows的新兴僵尸网络:Kraken

2021 年 10 月&#xff0c;ZeroFox Intelligence 披露了名为 Kraken 的僵尸网络。Kraken 通过 SmokeLoader 进行传播&#xff0c;每次更新攻击基础设施时都会扩大规模。尽管与 2008 年发现的 Kraken 僵尸网络同名&#xff0c;但二者并没有其他共同点。 功能 自从 2021 年 10 …

养殖自动化通风系统:未来畜牧业的智能守护者

在现代畜牧业中&#xff0c;养殖环境的控制对于动物的健康成长和养殖业者的成功至关重要。养殖自动化通风系统凭借其先进技术和精密设备&#xff0c;实现了对养殖场内环境条件的精准调控&#xff0c;显著提升了养殖效率和动物福利。本文将深入探讨养殖自动化通风系统的必要性、…

Unity3D 有限状态机(FSM)的架构与实现详解

一、引言 在游戏开发中&#xff0c;特别是使用Unity3D这样的游戏引擎时&#xff0c;控制游戏对象的行为往往是一个复杂且关键的任务。有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;作为一种强大的工具&#xff0c;被广泛用于管理游戏对象的状态转换…

CompletableFuture 场景DEMO代码展示

自定义线程池 自定义线程池好处参考&#xff1a; 线程是稀缺资源&#xff0c;如果被无限制的创建&#xff0c;不 仅会消耗系统资源&#xff0c;还会降低系统的稳定性&#xff0c;因此Java中提供线程池对线程进行统一分配、 调优和监控的框架。 自定义线程池ThreadPoolExecutor_…

Talking Web

1. curl 1.1 http curl http://127.0.0.1:80 向目标主机端口发送http请求 1.2 httphead curl -H “Host: 18ed3df584cd48328b5839443aa7b42b” http://127.0.0.1:80 1.3 httppath curl http://127.0.0.1:80/853c64cd218f80d0a59665666fb2ab80 1.4 URL编码路径 &#xff0…

LeetCode 2732. 找到矩阵中的好子集

一、题目描述 给定一个 m x n 的整数矩阵 mat 和一个整数 k&#xff0c;我们需要找到一个大小为 k 的子集 rows&#xff0c;使得这个子集对应的行在矩阵 mat 中构成的子矩阵中&#xff0c;所有元素之和最大。返回这个子矩阵中所有元素之和的最大值。 注意&#xff1a; 子集 …

天天大爆推文玩法营销号软件下载地址

天天大爆推文玩法营销号软件下载地址 天天大爆推文玩法营销号是一种营销策略&#xff0c;通过在社交媒体上发布频繁的推文来吸引关注和增加品牌曝光度。以下是一些可以用于天天大爆推文玩法营销号的策略&#xff1a; 营销号工具使用教程&#xff1a;https://iimenvrieak.feis…

数据结构之前缀树

写在前面 源码 。 前缀树&#xff0c;又叫做trie树&#xff0c;字典树&#xff0c;是一种多叉的树&#xff0c;一般用于单词前缀匹配的相关场景中&#xff0c;比如&#xff1a; 本文看下使用Java如何来实现这种数据结构。 1&#xff1a;基本介绍 思想&#xff1a;空间换时…

典型传感器简介及驱动安装

双目视觉传感器 Indemind 传感器简介 INDEMIND M1 是专为开发者提供的一款硬件&#xff0c;采用“双目摄像头IMU”多传感器融合架构与 微秒级时间同步机制&#xff0c;为视觉 SLAM 研究提供精准稳定数据源&#xff0c;以满足 SLAM 研究、导航及 避障开发、视觉动作捕捉开发、…

C++基础编程100题-014 OpenJudge-1.3-12 计算球的体积

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/12/ 描述 对于半径为r的球&#xff0c;其体积的计算公式为$ V4/3*πr^3 $&#xff0c;这里取π 3.14。 现给定r&#xff0c;求V。 输入 输入为一个不超过100的非负实数&#xff0c;即球半径&#xff0…

C# 高频面试题

C# 初级面试题及详细解答 1. C#中的值类型和引用类型的区别是什么&#xff1f; 解答: 值类型存储在堆栈上&#xff0c;直接包含数据&#xff1b;引用类型存储在堆上&#xff0c;存储的是对象的引用。值类型包括基本类型如 int、float 和 struct&#xff1b;引用类型包括 clas…

Perl编程探索:深入理解数组变量

Perl语言以其在文本处理和系统管理任务中的强大能力而受到广泛欢迎。在Perl中&#xff0c;数组是处理多个值集合的一种关键数据结构。本文将深入探讨Perl中的数组变量&#xff0c;包括它们的声明、初始化、访问和操作。 Perl数组的基本概念 在Perl中&#xff0c;数组可以用来…

FL Studio 21 集成了音频剪辑和增益控制,你可以更快、更精确地控制音频电平,包括自动交叉淡入淡出及更多功能

以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪主题”控制&#xff0c;水果编曲将变得与众不同。 更快的音频编辑 FL Studio 21 集成了音频剪辑包络和增益控制&#xff0c;你可以更快、更精确地控制音频电平&#xff0c…

代码随想录算法训练营第十四天| 110.平衡二叉树 | 257. 二叉树的所有路径 | 404.左叶子之和 | 222.完全二叉树的节点个数

110.平衡二叉树 &#xff08;优先掌握递归&#xff09; 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;后序遍历求高度&#xff0c;高度判断是否平衡 | LeetCode&#xff1a;110.平衡二叉树_哔哩哔哩_bilibili 1. 不知道咋做。 2. 在求二叉树的高度的代码上改&#xff…

学习面向对象前--Java基础练习题

前言 写给所有一起努力学习Java的朋友们&#xff0c;敲代码本身其实是我们梳理逻辑的一个过程。我们在学习Java代码的过程中&#xff0c;除了需要学习Java的一些基本操作及使用&#xff0c;更重要的是我们需要培养好的逻辑思维。逻辑梳理好之后&#xff0c;我们编写代码实现需要…

aws的alb,多个域名绑定多个网站实践

例如首次创建的alb负载均衡只有www.xxx.com 需要添加 负载 test2.xxx.com aws的Route 53产品解析到负载均衡 www.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx test2.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx 主要介绍目标组和规则 创建alb就不介…

windows系统命令设置ipv4参数(手动、自动)、设置DNS解析、命令设置计算机主机名

命令设置ipv4网络参数。 命令提示符中使用netsh命令为网络接口&#xff08;网络连接&#xff09;配置ipv4参数。命令格式如下&#xff1a; netsh interface ip set address "接口名称" static ip地址 子网掩码 [默认网关] 案例&#xff1a; 将本地 "以太网…

Spring底层原理之FactoryBean Bean工厂 单例对象 多例对象

FactoryBean 在 Spring Framework 中&#xff0c;FactoryBean 是一个用于创建其他 Bean 实例的特殊工厂 Bean。它允许开发者自定义 Bean 的创建逻辑&#xff0c;从而更加灵活地管理和配置 Bean 的实例化过程。 FactoryBean 接口 FactoryBean 接口是 Spring 框架中的一个重要…

推送电子邮箱与其他营销手段如何有效结合?

推送电子邮箱的效果如何&#xff1f;怎么优化邮件推送的策略&#xff1f; 将推送电子邮箱与其他营销手段有效结合&#xff0c;可以显著提升营销效果和用户体验。AokSend将探讨如何将推送电子邮箱与社交媒体营销、内容营销、搜索引擎优化&#xff08;SEO&#xff09;等手段相结…

ubuntu22.04安装AFLGo

git clone gitgithub.com:aflgo/aflgo.git cd aflgo export AFLGO$PWD sudo ./build.sh然后 上面的是官方流程 主要看下面 把build.sh里三个wget的先下好&#xff0c;放在对应路径&#xff0c;然后把他的注释掉&#xff0c;不然下载时间很长很长。然后下python那边容易报错&a…