搜索
首页web前端js教程我尝试从 React.js 切换到 Vue.js

介绍

几年前,像许多其他人一样,我对 React.js 前端库的钩子和功能组件的到来感到“兴奋”。他们提供了一种全新的开发方式,编写的代码比使用 Components 类少得多。我真的被迷住了,并且迷上了很长一段时间。

今天我不得不选择 Vue.js 框架来满足一个全新的客户端项目的需求。在这个项目结束时,我对自己说,这是为您作为这个框架的新用户提供反馈的机会!

那么,这种技能的提升是否符合 Vue.js 的恶名?
如今,使用 Vue 开发前端比使用 React 更好吗?

这就是我们将要看到的!

项目启动

锅炉板

谁说开始一个项目,就说寻找一个好的样板来节省我们数小时,甚至数天的辛苦配置!
不需要看得太远,npm create vue@latest 命令很大程度上满足了我的需求:

✔ Project name: … myproject-vue
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › Playwright
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) › No / Yes

已经支持 Typescript 语言,提供路由系统和商店,甚至还有单元和端到端测试的空间!

默认情况下,Vite 捆绑程序已安装。这不是让我不高兴吗!?事实上,构建速度很快,而且大多数时候,热模块替换 (HMR) 效果很好。

一点 npm run dev 来启动本地开发服务器,然后!它已经在浏览器中运行了!

J

用于生产?只需输入 npm run build 命令,检查输入后,项目将作为静态文件导出到 dist 目录中(在已激活 Typescript 的情况下):

vite v5.2.11 building for production...
✓ 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
✓ built in 591ms

项目架构

.
├── README.md
├── e2e/
├── index.html
├── package.json
├── public/
├── src/
│   ├── App.vue
│   ├── assets/
│   ├── components/
│   │   ├── HelloWorld.vue
│   │   ├── TheWelcome.vue
│   │   ├── WelcomeItem.vue
│   │   ├── __tests__/
│   │   └── icons/
│   ├── main.ts
│   ├── router/
│   │   └── index.ts
│   ├── stores/
│   │   └── counter.ts
│   └── views/
│       ├── AboutView.vue
│       └── HomeView.vue
├── tsconfig.json
└── vite.config.ts

在项目的建筑方面,我们特别发现:

  • index.html 文件,带有标签
    ;我们的整个 Vue 应用程序都嫁接在其上;
  • main.ts,依次创建App组件、router和store:
✔ Project name: … myproject-vue
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › Playwright
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) › No / Yes
  • 纯.ts文件,用于管理路由和存储;
  • 一些配置和测试文件;
  • ...当然还有 *.vue 文件,分为 组件(对应于通用和可重用元素)和 视图(对应于高级元素)页)

简而言之,文件架构相当简单,并且与 React 相对相似,即使在样板文件中检查了很多选项。
到目前为止,React 还没有什么真正新鲜的东西。这时就会出现显着差异!

Vue 文件的架构

这是受官方网站启发的代码片段。它只是在单击时更改文本的颜色,并在适用的情况下显示短语“上面的文本是绿色的”,但它代表了 *.vue 文件的典型架构:

vite v5.2.11 building for production...
✓ 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
✓ built in 591ms

注意事件与@click的绑定,条件显示与v-if,以及CSS中与v-bind()的绑定。

代码分为 3 个截然不同的部分:

  • 脚本:控制代码;
  • 模板:HTML结构;
  • style:CSS 样式表。

这三个部分永远不会混合?.
这有几个优点,这是我在客户项目的经验中亲身体验到的:

  • HTML 结构清晰、固定,并且具有非常声明式风格 - 一切都在那里,甚至是有条件显示的标签;
  • 逻辑部分与显示部分分离良好;
  • 可以就地编写纯CSS,直接链接到组件,无需安装第三方库;
  • 尽管样式分离,您仍然可以在 CSS 中插入变量。

使用

小缺点:先验没有自动 CSS 填充。因此,你应该瞄准像 vue-emotion 这样的书店。

从我的角度来看,我发现这种“all-in-JS”库有点破坏了 Vue 提供的架构,而且显然,浏览器特定的 CSS 属性在当今时代已经很少见了。 因此,de Vue 通常是自给自足的。

简而言之,我发现这种一体式架构非常令人愉快,但各个部分却清晰分开。这可以让您保持干净的代码,而且更加简洁。事实上,“业务逻辑/显示/样式”这三个部分的同时存在通常会鼓励您将代码重新划分为更小的模块,从而划分为更小的文件。

现在,如果我们仔细看看 Vue.js API 本身会怎样?

Vue.js API

在这里,我不会向您提供我遇到的 Vue.js API 的所有元素的详尽列表,而是只提供一些我发现相当代表 Vue 逻辑的非常具体的元素。

(重新)计算的值

让我们从 React 世界中众所周知的操作开始:在数据更新后智能地重新计算 HTML 渲染(或变量)。
有一个非常直观的compute()函数,它受益于记忆系统(一种“缓存”),以避免每次重新计算输出值:

J

✔ Project name: … myproject-vue
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › Playwright
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) › No / Yes

这里仅当 PushBtn 的值发生变化时才计算 magicNumber。而且它是可验证的:消息“再次计算!”仅当单击不同的按钮时才显示在控制台中。
因此,与 React 不同,无需在该函数中显式指定要监视的变量。

同样,我们还发现了 watch 和 watchEffect ,它们分别允许你对组件的全部或部分属性的变化做出反应,就像 React 中的 useEffect 一样:

vite v5.2.11 building for production...
✓ 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
✓ built in 591ms

J

只需点击数字修改按钮即可增加“手表”计数器。
然后,watch() 允许我们在每次某些变量发生变化时触发回调。

该功能的优势在于深入变量修改分析:Vue 甚至可以检测到子对象深处的变化!

双向同步

从父组件声明属性并将其传递给子组件是一个相当重复的操作。也可以在子级和父级之间同步此值,例如在表单的输入中。

此外,不要像这样同时管理属性和基于事件的更新回调:

✔ Project name: … myproject-vue
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › Playwright
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
? Add Vue DevTools 7 extension for debugging? (experimental) › No / Yes

…可以使用 DefineModel 宏来代替,这样可以简化编写:

vite v5.2.11 building for production...
✓ 48 modules transformed.
dist/index.html                      0.43 kB │ gzip:  0.28 kB
dist/assets/AboutView-C6Dx7pxG.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-D6pr4OYR.css       4.21 kB │ gzip:  1.30 kB
dist/assets/AboutView-CEwcYZ3g.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-CfPjtpcd.js       89.23 kB │ gzip: 35.29 kB
✓ built in 591ms

短多了! ?再说了,模型只有一个,我连命名都可以省去!

和家长:

.
├── README.md
├── e2e/
├── index.html
├── package.json
├── public/
├── src/
│   ├── App.vue
│   ├── assets/
│   ├── components/
│   │   ├── HelloWorld.vue
│   │   ├── TheWelcome.vue
│   │   ├── WelcomeItem.vue
│   │   ├── __tests__/
│   │   └── icons/
│   ├── main.ts
│   ├── router/
│   │   └── index.ts
│   ├── stores/
│   │   └── counter.ts
│   └── views/
│       ├── AboutView.vue
│       └── HomeView.vue
├── tsconfig.json
└── vite.config.ts

J

for 循环

看到 v-model 后继续 v-for 让我意识到 Vue.js 开始通过隐式代码引入很多“魔法”:

import './assets/main.css';

import { createApp } from 'vue';
import { createPinia } from 'pinia';

import App from './App.vue';
import router from './router';

const app = createApp(App); // composant racine

app.use(createPinia()); // store
app.use(router); // routage des pages front

app.mount('#app');

结果:

J

正如人们所期望的,v-for 指令因此可以为可迭代的每个元素自动重复 HTML 模式的一部分(此处为

  • 标签)。

    在 React 方面,需要使用 JSX 自己构建每个元素,随着组件的增长,代码的可读性会降低:

    <script setup>
      import { ref } from 'vue';
    
      const color = ref('green');
    
      function toggleColor() {
        color.value = color.value === 'green' ? 'blue' : 'green';
      }
    </script>
    
    <template>
      <p class="main-text">
        Cliquez sur ce texte pour changer de couleur.
      </p>
      <p v-if="color === 'green'">Le texte ci-dessus est vert.</p>
    </template>
    
    <style scoped>
      .main-text {
        color: v-bind(color);
      }
    </style>
    

    就我个人而言,从代码整洁度方面我更喜欢Vue的结构,只要不需要调试即可。 ?
    顺便问一下,既然我们谈论的是调试,那么 Vue 生态系统工具呢?

    开发工具

    这里有 3 个在我的项目开发过程中引起我注意的工具。

    VSCode 扩展:Vue 官方

    我从显而易见的开始,但是,是的,VSCode Vue(和其他 IDE)有一个扩展,它添加了语法突出显示、自动完成、片段等。必备!

    但是,我注意到着色和自动完成方面存在一些不稳定,有时有点反复无常?,在这里我能够欣赏到 React 方面更大的稳定性。

    Vue.js 开发工具

    与 React Developer Tools 浏览器插件一样,还有 Vue.js devtools 插件,我必须承认,它已经提供得很好:

    J

    有 4 个选项卡:

    • 组件,我们可以在其中观察,还可以修改组件的状态;
    • Timeline,它允许你记录事件和组件渲染时间,它实际上对应于浏览器“性能”选项卡的一个版本,但专注于 Vue;
    • Pinia,它允许您直接观察和修改标准存储的状态?,我发现特别受欢迎的现成集成;
    • 路线,您可以在其中列出不同的道路及其活动 - 这是一个我发现在我的中等规模项目上有点花哨的选项卡(特别是因为该信息与“组件”的信息不是很冗余" 选项卡,但这对于复杂的路由非常有用。

    简而言之,对于调试,这里有您需要的一切,甚至更多!

    虚拟化

    几乎毫不奇怪(但仍然有优点!),还有一个用于 Vue 的 UI 库,它实现了 Google 的 Material Design,并且还提供了标准图标列表:Vuetify。

    ✔ Project name: … myproject-vue
    ✔ Add TypeScript? … No / Yes
    ✔ Add JSX Support? … No / Yes
    ✔ Add Vue Router for Single Page Application development? … No / Yes
    ✔ Add Pinia for state management? … No / Yes
    ✔ Add Vitest for Unit Testing? … No / Yes
    ✔ Add an End-to-End Testing Solution? › Playwright
    ✔ Add ESLint for code quality? … No / Yes
    ✔ Add Prettier for code formatting? … No / Yes
    ? Add Vue DevTools 7 extension for debugging? (experimental) › No / Yes
    

    J

    这可以在项目启动或不需要太多图形定制的项目上节省大量时间。

    但一如既往,我建议密切关注这种高级库的渲染性能。库的配置容量往往是在其他地方付费的!

    结论

    对于从 React 迁移到 Vue 的体验我们能说些什么?

    首先,从代码的角度来看,与 React 相比,我想说 Vue 库是:

    • 更加结构化
    • 更具声明性 ;
    • 更简洁

    但是,由于其代码更多地用 JSX 编写,我发现 React 仍然比 Vue 更具互操作性、更具编程性和更明确,并且具有更好的 linter 稳定性。

    在开发环境和社区方面,Vue 已经具备了确保高效开发到生产的所有优势。

    那么 Vue 上的这种技能提升是否名副其实?我会说是的。我发现这个学习曲线很有效,如果有机会,我会继续与 Vue 一起发展。

    最后,现在用 Vue 开发前端比用 React 更好吗?
    从完全个人的角度来看,我认为不是。尽管 Vue 和 React 的应用场景略有不同,但我更喜欢依赖 React 可靠的类型系统和更灵活的代码。但也许 Vue 的下一个版本及其工具会改变我的想法?

    你呢,你的反馈是什么?

  • 以上是我尝试从 React.js 切换到 Vue.js的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

    Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

    Python vs. JavaScript:社区,图书馆和资源Python vs. JavaScript:社区,图书馆和资源Apr 15, 2025 am 12:16 AM

    Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

    从C/C到JavaScript:所有工作方式从C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

    从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

    JavaScript引擎:比较实施JavaScript引擎:比较实施Apr 13, 2025 am 12:05 AM

    不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

    超越浏览器:现实世界中的JavaScript超越浏览器:现实世界中的JavaScriptApr 12, 2025 am 12:06 AM

    JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

    使用Next.js(后端集成)构建多租户SaaS应用程序使用Next.js(后端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:23 AM

    我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

    如何使用Next.js(前端集成)构建多租户SaaS应用程序如何使用Next.js(前端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:22 AM

    本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

    JavaScript:探索网络语言的多功能性JavaScript:探索网络语言的多功能性Apr 11, 2025 am 12:01 AM

    JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您听不到任何人,如何修复音频
    1 个月前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它们
    1 个月前By尊渡假赌尊渡假赌尊渡假赌

    热工具

    Atom编辑器mac版下载

    Atom编辑器mac版下载

    最流行的的开源编辑器

    MinGW - 适用于 Windows 的极简 GNU

    MinGW - 适用于 Windows 的极简 GNU

    这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

    EditPlus 中文破解版

    EditPlus 中文破解版

    体积小,语法高亮,不支持代码提示功能

    Dreamweaver Mac版

    Dreamweaver Mac版

    视觉化网页开发工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器