说实话,第一次对 Vue 有点小失望

开发 前端
说到一个文件里定义多个文件、逻辑更加聚合,其实本来 Vue 就支持!如果你想要把多个组件写在同一个文件里、让逻辑更加紧凑,那是很简单的事情,只需要使用 Vue 的 defineComponent + h函数,即可做到。

在最近的 Vue Conf 2024 上,Vue 官方推荐了一款 Vue 的工具 Vine-Vue,在这里我先 respect 一下 Vue 团队对于开发者的鼓励~但是我想对 Vue 官方团队说:你真的觉得有必要推荐这个库吗?

Vue-Vine

图片图片

先来说说这个库的作用,这个库的作用就是:让 Vue 组件能通过函数式来定义。

举个例子,我们在平时写一个组件的时候,会通过模板的方式去定义。

图片图片

但是在使用了 Vue-Vine这个库之后,可以使用函数式的方式去定义。

图片图片

翻看了一下Vue-Vine的官方文档,总结出Vue-Vine这个库的初衷是:

  • 想要做到像 React JSX 那样的组件定义方式
  • 可以在同个文件里定义多个组件
  • 使得逻辑更加聚合,提高开发效率

图片图片

但是我感觉现阶段 Vue 生态就具备这样的能力了,且已经经过一段时间的打磨了呀!

定义多文件、逻辑聚合?Vue 本来就可以!

说到一个文件里定义多个文件、逻辑更加聚合,其实本来 Vue 就支持!

如果你想要把多个组件写在同一个文件里、让逻辑更加紧凑,那是很简单的事情,只需要使用 Vue 的 defineComponent + h函数,即可做到:

图片图片

使用起来就跟平时 Vue 的模板使用别无二致。

图片图片

图片图片

甚至你可以把爷父孙组件全部定义在同一个文件里。

图片图片

使用起来也是跟平时 Vue 的模板使用别无二致。

图片图片

图片图片

h 函数太麻烦?那就用 TSX/JSX!

肯定会有人说 Vue 的h函数用起来太麻烦了,各种层级嵌套,写起来没有 TSX/JSX 那么爽。

其实,在 Vue 中也可以写 TSX/JSX !!

pnpm i @vitejs/plugin-vue-jsx -D

安装完毕后,需要在 vite.config.ts 中去进行插件配置。

图片图片

图片图片

配置完就可以写 TSX 啦!!!

基本渲染 & 响应式 & 事件

我们可以新建一个 TsxComp.tsx 文件,来写 TSX 。写 TSX 可以不在 Vue文件 中去写。

图片图片

接着我们可以去渲染这个组件。

图片图片

可以看到基本的 渲染 & 响应式 & 事件 已经实现。

图片图片

v-if 条件判断渲染

模板中一般使用 v-if 来进行条件判断渲染,而 TSX 是比较接近原生语法的,其实条件判断也很像原生的写法,直接用 &&。

图片图片

图片图片

v-for 循环渲染

模板中使用 v-for 来循环渲染,TSX 更接近原生,需要使用数组方法 map 来进行渲染。

图片图片

图片图片

slot 插槽

在模板中,可以通过插槽 slot 去传入一些 DOM 到组件内去渲染,TSX 中也一样有插槽,只不过用法不像模板那样用,而是跟 Vue 的h函数类似。

举个例子,我写一个 TSX 组件接收 default 和 test 两个插槽。

图片图片

如果你是从模板传到 TSX 中的话,那么传入的方式无差别,也是使用 template 传入。

图片图片

图片图片

如果你是从 TSX 传到 TSX 的话,那么传入方式通过 props 来传了。

图片图片

图片图片

JSX/TSX 性能差

当然你如果用了 JSX/TSX 的话,性能肯定是差一丢丢的,但是这点开销,真不算啥~大不了不用呗,用回 h 函数。

图片 图片

责任编辑:武晓燕 来源: 前端之神
相关推荐

2011-07-21 21:01:37

诺基亚塞班苹果

2017-03-22 15:38:28

代码架构Java

2023-09-11 00:14:46

后端团队项目

2022-08-15 08:16:56

shiroWeb认证

2022-03-16 14:59:28

打包debian模板文件

2012-04-13 10:11:58

Windows 8泄露

2023-04-14 07:49:26

iOS安卓

2015-10-26 16:38:17

2021-02-05 08:35:21

私活程序员

2022-06-21 09:26:28

开源项目PR

2023-08-02 07:07:26

GPU核心ACM

2020-12-08 10:25:56

HibernateMyBatis数据库

2013-02-25 09:43:22

LambdasJava8

2018-08-15 10:34:30

戴尔

2012-01-18 11:18:12

Web App

2018-11-21 14:51:00

Windows 功能系统

2017-08-08 12:50:51

Serverless云端数据库

2015-11-02 14:42:12

2013-05-13 11:35:53

独立开发开发经验开发感悟

2013-06-03 09:28:49

游戏设计
点赞
收藏

51CTO技术栈公众号