TSX常见简单入门用法之Vue3+Vite

 更新时间:2022年08月19日 09:11:19   作者:�kid  
Vue3的确可以直接使用tsx开发,唯一需要处理的就是children,而且处理起来还是比较不爽的,下面这篇文章主要给大家介绍了关于TSX常见简单入门用法之Vue3+Vite的相关资料,需要的朋友可以参考下

1.安装tsx

1.安装tsx插件

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

2.vite.config.ts里的配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
 
 
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),vueJsx()],
})

3.tsconfig.json里的配置

{
  "compilerOptions": {
    "target": "esnext",
    "useDefineForClassFields": true,
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "jsxFactory": "h",
    "jsxFragmentFactory": "Fragment",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": ["esnext", "dom"],
    "skipLibCheck": true,
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

这三条为配置项 

    "jsx": "preserve",
    "jsxFactory": "h",
    "jsxFragmentFactory": "Fragment",

2.使用TSX

1.app.vue里的代码

<template>
  <renderDom title="我是标题" @on-click="getNum"></renderDom>
</template>
 
<script setup lang="ts">
 
import renderDom from "./App";
import { provide, ref } from "vue";
 
const data = ref(false);
provide("flag", data);
const getNum = (num: number) => {
  console.log("我接受到了", num);
};
</script>
 
<style>
</style>

2.app.tsx的代码

import { ref } from "vue";
 
let v = ref<string>("");
let flag = ref(false);
let arr = ref([0, 1, 2, 3, 4, 5]);
//  tsx不会自动结构所以该用.value还是要使用
type Props = {
  title: string;
};
const renderDom = (props: Props, ctx: any) => {
  return (
    <div>
        <button onClick={clickEmit.bind(this,ctx)}>点击emit</button>
      <h1>{props.title}</h1>
      <div>
        <input v-model={v.value} type="text" />
        <div>
          <h1>{v.value}</h1>
        </div>
      </div>
      <div>
        <div v-show={flag.value}>正确的</div>
        <div v-show={!flag.value}>错误的</div>
      </div>
      {/* <div>
        <div v-if={flag.value}>正确的</div>
        <div v-if={!flag.value}>错误的</div>
        </div> */}
      {/* 不支持v-if 可用三元表达式去代替 */}
      <div>{flag.value ? <div>正确的</div> : <div>错误的</div>}</div>
      {/* 不支持v-for 但可以用map循环去代替 */}
      {/*不支持v-bind,可以直接绑定数值 */}
      <div>
        {arr.value.map((item, i: any) => {
          return (
            <div data-inext={i} onClick={clickIndex.bind(this, i)}>
              {item}
            </div>
          );
        })}
      </div>
    </div>
  );
};
 
const clickIndex = (i: any) => {
  alert(i);
};
 
const clickEmit=(ctx:any)=>{
    ctx.emit('on-click',123)
}
export default renderDom;

注意:

1.tsx里面写的标签内容是不会自动解构的,所以ref里面的.value还是要加上值才会出来2.tsx里面支持v-show,v-model,但不支持v-bind,v-for,v-if,所以再写这些的时候要更改写法

v-if使用三元表达式

  <div>{flag.value ? <div>正确的</div> : <div>错误的</div>}</div>

 v-for通过map函数遍历数组来实现

 <div>
        {arr.value.map((item, i: any) => {
          return (
            <div data-inext={i} onClick={clickIndex.bind(this, i)}>
              {item}
            </div>
          );
        })}
  </div>

v-bind可以直接绑值

 <div data-inext={i} onClick={clickIndex.bind(this, i)}>

props和emit使用

1.props

<renderDom title="我是标题" @on-click="getNum"></renderDom>

(app.vue里传值title)

type Props = {
  title: string;
};
const renderDom = (props: Props, ctx: any) 

(renderDom里面接收后可以使用,和以前一样)

2.emit

const renderDom = (props: Props, ctx: any)

(拿到上下文)

 <button onClick={clickEmit.bind(this,ctx)}>点击emit</button>

(绑定方法)

const clickEmit=(ctx:any)=>{
    ctx.emit('on-click',123)
}

 (通过emit传值)

(以上为app.tsx文件里面)

  <renderDom title="我是标题" @on-click="getNum"></renderDom>

(绑定自定义事件) 

const getNum = (num: number) => {
  console.log("我收到了", num);
};

(拿到值去使用)

(以上为父组件收到并使用)

总结

到此这篇关于TSX常见简单入门用法之Vue3+Vite的文章就介绍到这了,更多相关TSX常见用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue直接打开public(本地)文件下的pdf文件方式

    vue直接打开public(本地)文件下的pdf文件方式

    这篇文章主要介绍了vue直接打开public(本地)文件下的pdf文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue前后分离调起微信支付

    vue前后分离调起微信支付

    这篇文章主要为大家详细介绍了vue前后分离调起微信支付,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • vue3(ts)类型EventTarget上不存在属性value的问题

    vue3(ts)类型EventTarget上不存在属性value的问题

    这篇文章主要介绍了vue3(ts)类型EventTarget上不存在属性value的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • el-form组件清除校验提示正确方法(前端技能提升)

    el-form组件清除校验提示正确方法(前端技能提升)

    el-form组件提供了表单验证的功能,可以通过在el-form上绑定rules属性,并在el-form-item上设置prop属性来进行校验,这篇文章主要给大家介绍了关于el-form组件清除校验提示正确方法(前端技能提升)的相关资料,需要的朋友可以参考下
    2023-12-12
  • Vue3获取地址栏参数方法详解

    Vue3获取地址栏参数方法详解

    Vue3 获取地址栏参数有两个方式:查询参数和路径参数。Vue3获取地址栏参数是从路由router中获取,查询参数和路径参数获取方式不一样。感兴趣的同学可以参考阅读
    2023-04-04
  • vue如何实现接口统一管理

    vue如何实现接口统一管理

    这篇文章主要介绍了vue如何实现接口统一管理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

    Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

    这篇文章主要介绍了Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners),需要的朋友可以参考下
    2018-05-05
  • vue this.$refs.xxx报错undefined问题及解决

    vue this.$refs.xxx报错undefined问题及解决

    这篇文章主要介绍了vue this.$refs.xxx报错undefined问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue中的ref/reactive区别及原理解析

    vue中的ref/reactive区别及原理解析

    Vue中的ref和reactive是两种不同的数据响应式管理方式,通过ref创建的响应式对象在访问和修改时会自动触发重新渲染,本文给大家介绍vue中的ref/reactive区别及原理解析,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • Element-UI el-calendar样式如何修改日历

    Element-UI el-calendar样式如何修改日历

    这篇文章主要介绍了Element-UI el-calendar样式如何修改日历问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论