React18路由和Vue3路由进行对比

news2025/1/5 19:27:44

在这里插入图片描述

本文将深入比较 React 18 和 Vue 3 路由的不同之处,帮助你更好地理解如何在这两个框架中进行路由管理。希望能对于从 Vue 3 迁移到 React 的开发者,理解这些差异,帮助你更高效地切换框架和构建应用。

1. 路由配置

React 18 的路由配置

React 18 使用 react-router-dom 来处理路由。在 React 中,我们使用 createBrowserRoutercreateHashRouter 来创建路由实例。路由实例通常作为数组传递给 RouterProvider 进行渲染。配置如下:

import { createBrowserRouter } from 'react-router-dom';
import Layout from '../pages/Layout';
import Login from '../pages/Login';
import NotFound from '../pages/NotFound';

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout />,
    children: [
      { path: 'login', element: <Login /> },
      { path: '*', element: <NotFound /> }
    ]
  }
]);

export default router;

Vue 3 的路由配置

Vue 3 使用 Vue Router 来管理路由,配置上更加简洁。路由实例是通过 createRoutercreateWebHistory(或 createWebHashHistory)来创建的。Vue 3 也使用类似的路由对象数组配置方式:

import { createRouter, createWebHistory } from 'vue-router';
import Layout from '../pages/Layout.vue';
import Login from '../pages/Login.vue';
import NotFound from '../pages/NotFound.vue';

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      component: Layout,
      children: [
        { path: 'login', component: Login },
        { path: '/:pathMatch(.*)*', component: NotFound }
      ]
    }
  ]
});

export default router;

差异

  • 路由对象的配置方式:在 React 中,你需要明确地使用 createBrowserRoutercreateHashRouter 创建路由实例,而 Vue 则通过 createRouter 来创建一个路由实例并指定历史模式。
  • 路径匹配:Vue 3 路由使用 pathMatch(.*) 来匹配所有未匹配的路径(即 404 页面)。React 路由则通过配置 path: '*' 来实现相同的效果。

2. 路由导航

React 18 的导航

React 18 使用 <Link> 组件进行声明式导航,同时提供 useNavigate hook 来实现编程式导航。你可以通过 useNavigate 来控制路由跳转:

import { Link, useNavigate } from 'react-router-dom';

const Login = () => {
  const navigate = useNavigate();
  return (
    <div>
      <Link to="/login">登录</Link>
      <button onClick={() => navigate('/login')}>跳转到登录页</button>
    </div>
  );
};

Vue 3 的导航

在 Vue 中,你可以使用 <router-link> 组件来实现声明式导航。对于编程式导航,Vue 提供了 this.$router.push 方法:

<template>
  <div>
    <router-link to="/login">登录</router-link>
    <button @click="goToLogin">跳转到登录页</button>
  </div>
</template>

<script>
export default {
  methods: {
    goToLogin() {
      this.$router.push('/login');
    }
  }
};
</script>

差异

  • 声明式导航:React 使用 <Link>,而 Vue 使用 <router-link>。这两个组件的功能相似,都是用于在组件中声明路由跳转。
  • 编程式导航:React 使用 useNavigate() hook 来进行编程式导航,而 Vue 则使用 this.$router.push()。这两者功能类似,都是用来通过编程方式跳转到其他路由,但 React 的方法是 hook,Vue 则是基于实例的。

3. 路由参数

React 18 路由参数

React 通过 useParamsuseSearchParams 钩子来获取路径参数和查询参数:

import { useParams, useSearchParams } from 'react-router-dom';

const Article = () => {
  const { id, name } = useParams(); // 获取路径参数
  const [searchParams] = useSearchParams(); // 获取查询参数
  return (
    <div>
      <h1>文章 ID: {id}, 文章名称: {name}</h1>
      <h2>查询参数 - ID: {searchParams.get('id')}, Name: {searchParams.get('name')}</h2>
    </div>
  );
};

Vue 3 路由参数

Vue 通过 $route.params$route.query 来获取路径参数和查询参数:

<template>
  <div>
    <h1>文章 ID: {{ $route.params.id }}, 文章名称: {{ $route.params.name }}</h1>
    <h2>查询参数 - ID: {{ $route.query.id }}, Name: {{ $route.query.name }}</h2>
  </div>
</template>

差异

  • 路径参数:React 使用 useParams hook 获取路径参数,而 Vue 使用 $route.params。两者本质上是一样的,但 React 的实现是基于 hook 的方式,Vue 则是基于实例的方式。
  • 查询参数:React 使用 useSearchParams 获取查询参数,Vue 则通过 $route.query 来访问查询参数。这两种方法的语法和实现方式略有不同。

4. 嵌套路由

React 18 的嵌套路由

React 的嵌套路由通过 children 属性实现。你可以在父路由中指定子路由并渲染:

// createBrowerRouter 其实是history路由模式
const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout />,
    children: [
      { path: 'board', element: <Board /> },
      { path: 'about', element: <About /> }
    ]
  }
]);

Vue 3 的嵌套路由

Vue 也支持嵌套路由。子路由被定义在父路由的 children 数组中:

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      component: Layout,
      children: [
        { path: 'board', component: Board },
        { path: 'about', component: About }
      ]
    }
  ]
});

差异

  • 嵌套路由配置:React 和 Vue 在嵌套路由的配置上非常相似,都是通过父路由的 children 数组来配置子路由。唯一的差异是 React 的路由配置是通过 createBrowserRouter 来创建的,而 Vue 使用 createRouter

总结

虽然 React 18 和 Vue 3 的路由系统都提供了强大的功能,但两者在实现上有一些细节上的差异,尤其是在路由配置、导航方式、路由参数的获取以及嵌套路由的实现上。主要差异总结如下:

  • 路由实例的创建方式:React 使用 createBrowserRoutercreateHashRouter,Vue 使用 createRouter
  • 路由导航:React 使用 useNavigate hook,而 Vue 使用 this.$router.push
  • 参数获取:React 使用 useParamsuseSearchParams,Vue 使用 $route.params$route.query
  • 嵌套路由:两者的配置方式相似,均通过 children 数组进行配置。

这样我们可以看出,React 18和Vue 3 还是有很多相似处的,只是语法用法上不同。

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

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

相关文章

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中&#xff0c;下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm&#xff08;Node Package Manager&#xff09;则…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

指代消解:自然语言处理中的核心任务与技术进展

目录 前言1. 指代消解的基本概念与分类1.1 回指与共指 2. 指代消解的技术方法2.1 端到端指代消解2.2 高阶推理模型2.3 基于BERT的模型 3. 事件共指消解&#xff1a;跨文档的挑战与进展3.1 联合模型3.2 语义嵌入模型&#xff08;EPASE&#xff09; 4. 应用场景与前景展望4.1 关键…

CDPHudi实战-集成spark

[一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do scp /opt/software/hudi-1.0.0/packaging/hudi-spark-bundle/target/hudi-spark3.4-bundle_2.12-1.0.0.jar cdp73-$i:/opt/cloudera/parcels/CDH/lib/spark3/jars/; done hudi-spark3.4-bu…

leetcode:面试题 17.01. 不用加号的加法(python3解法)

难度&#xff1a;简单 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 题解&#xff1a; class Solution:def add(self, a: int, b: int) -> int:sum_list [a…

设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用&#xff0c;尤其是在需要集成…

二维码文件在线管理系统-收费版

需求背景 如果大家想要在网上管理自己的文件&#xff0c;而且需要生成二维码&#xff0c;下面推荐【草料二维码】&#xff0c;这个系统很好。特别适合那些制造业&#xff0c;实体业的使用手册&#xff0c;你可以生成一个二维码&#xff0c;贴在设备上&#xff0c;然后这个二维码…

MySQL8安装与卸载

1.下载mysql MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2.解压mysql安装包 解压到自己定义的目录&#xff0c;这里解压就是安装&#xff0c;解压后的路径不要有空格和中文。 3.配置环境变量 配置环境变量可以方便电脑在任何的路径…

数据挖掘——关联规则挖掘

数据挖掘——关联数据挖掘 关联数据挖掘关联规则关联规则挖掘问题&#xff1a;具体挖掘过程Apriori 产生关联规则 关联数据挖掘 关联分析用于发现隐藏在大型数据集中的令人感兴趣的联系&#xff0c;所发现的模式通常用关联规则或频繁项集的形式表示。 关联规则反映一个事物与…

【74HC192减法24/20/72进制】2022-5-17

缘由用74ls192设计一个72进制的减法计数器&#xff0c;需要有逻辑电路图-硬件开发-CSDN问答

Samsung手机首次主要采用竞对Micron LPDDR5内存

根据韩国媒体《韩国先驱报》&#xff08;The Korea Herald&#xff09;的报道&#xff0c;即将在1月底发布的三星 Galaxy S25 系列智能手机将首次主要使用美光科技&#xff08;Micron Technology&#xff09;提供的移动DRAM&#xff0c;而非三星自家的产品。这一消息对于三星的…

Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)

Linux内核源码添加到VsCode工程 下载Linux-4.9.88源码&#xff1a; 没有处理同名文件的压缩包&#xff1a; https://pan.baidu.com/s/1yjIBXmxG9pwP0aOhW8VAVQ?pwde9cv 已把同名文件中以大写命名的文件加上_2后缀的压缩包&#xff1a; https://pan.baidu.com/s/1RIRRUllYFn2…

leetcode题目(3)

目录 1.加一 2.二进制求和 3.x的平方根 4.爬楼梯 5.颜色分类 6.二叉树的中序遍历 1.加一 https://leetcode.cn/problems/plus-one/ class Solution { public:vector<int> plusOne(vector<int>& digits) {int n digits.size();for(int i n -1;i>0;-…

vue3+Echarts+ts实现甘特图

项目场景&#xff1a; vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…

接受Header使用错Map类型,导致获取到的Header值不全

问题复现 在 Spring 中解析 Header 时&#xff0c;我们在多数场合中是直接按需解析的。例如&#xff0c;我们想使用一个名为 myHeaderName 的 Header&#xff0c;我们会书写代码如下&#xff1a;RequestMapping(path "/hi", method RequestMethod.GET) public Str…

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

【时时三省】(C语言基础)常见的动态内存错误

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对NULL指针的解引用操作 示例&#xff1a; malloc申请空间的时候它可能会失败 比如我申请一块非常大的空间 那么空间可能就会开辟失败 正常的话要写一个if&#xff08;p&#xff1d;&#x…

【51项目】51单片机自制小霸王游戏机

视频演示效果&#xff1a; 纳新作品——小霸王游戏机 目录&#xff1a; 目录 视频演示效果&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、连接方式&#xff1a; 1.1 控制引脚 1.2. 显示模块 1.3. 定时器 1.4. 游戏逻辑与硬件结合 1.5. 中断处理 二、源码分析&#xff1a…

ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK

目录 OpenAI RTC SDK简介应用场景详解智能家居控制系统个人健康助手教育玩具 技术亮点解析低功耗设计快速响应高精度RTC安全性保障开发者指南 最近&#xff0c;OpenAI官方发布了一款针对ESP32-S3的嵌入式实时RTC&#xff08;实时时钟&#xff09;SDK&#xff0c;这标志着ESP32-…

Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)

作者&#xff1a;来自 Elastic Maxime Greau 在这篇博文中&#xff0c;我们将讨论如何通过在 Elastic 产品中切换到最小基础镜像并优化可扩展漏洞管理程序的工作流程来显著减少 Elastic 容器镜像中的常见漏洞和暴露 (Common Vulnerabilities and Exposures - CVEs)。 基于 Chai…