vue3+ts+tsx的使用与好处(语法方面:tsx==jsx)

前言:

        整理分享下vue3+ts+tsx相关的资料,有react使用经验的小伙伴应该更能理解这个的好处,终于在vue3中也支持了,相当于函数的方法来操作界面。

1、vue3项目中为什么要用tsx(等同于我们react的jsx)

  1. 类型安全:TSX 可以帮助开发者在编写代码的过程中检测类型错误,减少运行时错误的发生,并提高代码可维护性。

  2. 更好的代码提示:在使用 TSX 编写代码时,开发者可以享受到更好的编码提示和自动补全功能,从而提高编写代码的效率。

  3. 更容易维护:在使用 TSX 编写代码时,代码结构更加清晰明了,可读性更高,使得代码的维护更加容易。

  4. 容易与 React 生态系统集成:TSX 是 React 生态系统中广泛使用的一个技术栈,使用 TSX 可以更容易地与其它开源组件和库进行集成和协作。

2、他的用法和我们常规的vue3+ts使用有什么区别

  1. 语法:Vue 3 的模板语法和 TSX 的语法是不同的,Vue 3 的模板语法更接近于 HTML,而 TSX 的语法更接近于 JavaScript。

  2. 类型检查:TSX 依赖于 TypeScript,可以使用 TypeScript 的类型检查功能来减少代码中的错误,而 Vue 3 的模板语法没有这种类型检查功能。

  3. 可读性:TSX 的语法更接近于 JavaScript,对于熟悉 JavaScript 的开发者来说,可能更容易阅读和理解 TSX 的代码。但同时也可能会感到 TSX 的语法更繁琐,对于不熟悉 TypeScript 的开发者来说学习曲线可能会更陡峭。

  4. 性能:使用 TSX 编写 Vue 3 组件可能会比使用模板语法的组件具有更好的性能。因为 TSX 可以直接将组件转换为纯 JavaScript 代码,而模板语法需要在运行时进行解析和编译。

        总的来说,使用 TSX 可以使代码更可读性更好,具有类型检查等优势,但也需要引入 TypeScript,并且需要开发者对 TypeScript 有一定的了解。而使用 Vue 3 的模板语法则更加接近于 HTML,对于前端开发者来说更加直观,但可能会牺牲一些性能。具体使用哪种方式需要根据项目需求和开发者技能来决定。

3、项目中的安装部署

1、安装, babel-plugin-jsx
npm insatll @vue/babel-plugin-jsx --save
2、在项目的 babel.config.js 文件的plugins中添加配置:
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: [
    '@vue/babel-plugin-jsx'
  ]
}

4、具体使用的一些方法分享(使用他与不使用做对比)

1、最重要的一点,他的模块是通过setup的return返回的
import { defineComponent, ref, reactive } from 'vue'

export default defineComponent({
  props: {
  },
  setup(props) {
    const msg = ref('hello tsx')
    const state = reactive({
      count: 1
    })

    return () => {
      return <div>
        {msg.value} <span>{state.count}</span>
      </div>
    }
  }
})
2、元素上绑定,{} 加内容
vue文件:
<com :data="data"></com>

tsx文件:
<com data={data}></com>
3、v-if  必须用三木运算,或者是  &&
vue文件:
<div v-if="flag"></div>

tsx文件,js逻辑代码必须用大括号包裹:
{
  flag ? <div></div> : null
}
isActive && <p>123</p>  //意思就是, isActive === true的情况下,展示 && 后面的标签

isActive && title==='123' && <p>123</p>  
//意思就是, isActive === true && title==='123' 的情况下,展示 && 最后面的标签
4、v-for
vue文件:
<ul>
  <li v-for="item in list" :key="item">{{item}}</li>
</ul>

tsx文件:
<ul>
  {
    list.map((item) => {
      return <li key={item}>{item}</li>
    })
  }
</ul>
5、点击事件等绑定,有点像原生了,onScroll  ,on
vue文件:
<div @click="handleClick"></div>

tsx文件:
<div onClick={handleClick}></div>

onMouseenter={handleMouseEnter}
onMouseleave={handleMouseLeave}
6、子传父
vue:
子组件:
emit('custom')

父组件:
<ChildComponent @custom="handleCustom" />


tsx:
子组件:
emit('custom')

父组件:
<ChildComponent onCustom={handleCustom} />

5、api文档分享

使用 JSX 书写标签语言 – React 中文文档

Vue3和Typescript的使用方式主要有以下几种: 1. 使用Vue CLI创建项目时选择TypeScript作为语言 在创建Vue项目时,可以选择使用TypeScript作为项目的语言。这样可以直接在项目中使用TypeScript,并且会自动生成一些TypeScript相关的配置文件和代码结构。具体步骤如下: ``` vue create my-project ``` 在选择项目配置时选择"Manually select features",然后选择TypeScript即可。 2. 在已有的Vue项目中添加TypeScript支持 如果已经有一个Vue项目,也可以在其中添加TypeScript支持。具体步骤如下: - 安装TypeScript和相关依赖 ``` npm install --save-dev typescript ts-loader @vue/cli-plugin-typescript ``` - 配置TypeScript 在项目根目录下创建一个`tsconfig.json`文件,并添加以下内容: ```json { "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "esModuleInterop": true, "moduleResolution": "node", "allowSyntheticDefaultImports": true, "sourceMap": true, "baseUrl": ".", "paths": { "@/*": ["src/*"] }, "lib": ["esnext", "dom", "dom.iterable", "scripthost"] }, "include": ["src/**/*.ts", "src/**/*.tsx", "tests/**/*.ts", "tests/**/*.tsx"], "exclude": ["node_modules"] } ``` - 配置Vue插件 在`vue.config.js`文件中添加以下内容: ```js module.exports = { pluginOptions: { 'style-resources-loader': { preProcessor: 'scss', patterns: [] } }, configureWebpack: { resolve: { extensions: ['.ts', '.tsx', '.js', '.vue', '.json'] }, module: { rules: [ { test: /\.tsx?$/, loader: 'ts-loader', exclude: /node_modules/, options: { appendTsSuffixTo: [/\.vue$/] } } ] } } } ``` - 修改Vue组件文件后缀名 在Vue组件文件中,将`.vue`后缀名改为`.vue.ts`,这样可以直接在Vue组件中使用TypeScript。 3. 在Vue3中使用TypeScript 在Vue3中,可以使用以下方式来使用TypeScript: - 在Vue组件中使用TypeScript 在Vue3中,可以直接在Vue组件中使用TypeScript。具体步骤如下: - 在`setup()`函数中定义变量的类型 - 在`defineComponent()`函数中使用`defineProps()`和`defineEmits()`定义属性和事件的类型 - 在`template`中使用TypeScript语法 示例代码: ```html <template> <div>{{ count }}</div> </template> <script lang="ts"> import { defineComponent, defineProps, defineEmits } from 'vue' interface Props { msg: string count: number } export default defineComponent({ props: defineProps<Props>(), emits: defineEmits(['update:count']), setup(props) { const count = ref(props.count) return { count } } }) </script> ``` - 在Vue3中使用Composition API Vue3中的Composition API也支持使用TypeScript。具体步骤如下: - 使用`ref()`、`reactive()`等函数定义变量的类型 - 在`defineComponent()`函数中使用`defineProps()`和`defineEmits()`定义属性和事件的类型 示例代码: ```html <template> <div>{{ count }}</div> </template> <script lang="ts"> import { defineComponent, defineProps, defineEmits, ref } from 'vue' interface Props { msg: string count: number } export default defineComponent({ props: defineProps<Props>(), emits: defineEmits(['update:count']), setup(props) { const count = ref(props.count) return { count } } }) </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值