Vue3+tsx开发语法详解

很多组件库都使用了TSX的方式开发,主要因为其灵活性比较高,TSXSFC开发的优缺点就不介绍了,这里主要说一下将SFC项目改造为TSX的过程。

安装JSX库

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

安装完之后在vite.config.ts进行插件使用,代码如下:

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";

export default defineConfig({
  plugins: [
    vue(),
    vueJsx() //插件使用
  ],
});

然后就可以愉快的使用TSX来开发Vue组件了,下面主要说一下SFCTSX的部分区别。

基本语法对照 SFC

defineComponent 和 setup

SFC方式结构固定:template、script、style






TSX方式就完全是一个ts文件的写法,没有模板template和样式style

import { defineComponent } from 'vue';

export default defineComponent({
  setup() {
    // Todo
    return () => 
Hello World
} })

setup中函数的返回值有多种方式,可以直接返回html:

Hello World
,这个适合结构简单的页面,如果返回比较多,可以使用如下方式:

import { defineComponent } from 'vue';

export default defineComponent({
  setup() {
    // Todo
    return () => (
      
Child1
Child2
Child3
) } })

如果是多节点,可以使用空符号包裹

return () => (
  <>
    
Child1
Child2
Child3
)

在以上的方式中我们把除了布局以外的逻辑都写在//Todo部分,但是有时候我们需要做一些按条件渲染的逻辑,那么也可以在return里加处理逻辑,例如:

import { defineComponent } from 'vue';

export default defineComponent({
  setup() {
    // Todo
    return () => {
      if (something) {
        return (
          
Child1
Child2
Child3
) } else { return (
noChild
) } } } })

这种方式类似v-if,但是和v-if还是有点区别,v-if可以作用在更小的范围,而这种方式只适合整个组件的条件渲染,这个可能不好理解,在下面v-if的使用中我们会看到区别。

v-if

使用条件判断语句来实现v-if的功能,一般是三目运算符

// SFC