vue3.0实践之写tsx语法实例

目录
  • 测试tsx 新建一个App.tsx页面
  • tsx使用v-model指令 (App.tsx组件)
  • 使用v-show、与三目运算符
  • tsx之数组的遍历(map)
  • 自定义属性 data-index
  • tsx绑定事件
  • tsx之 props父组件向子组件传递参数
    • App.vue 父
    • App.tsx 子
  • tsx之子组件 向父组件 传递数据
    • 子组件 App.tsx
    • App.vue 父
  • 总结
  • 00:下载

    • yarn add @vitejs/plugin-vue-jsx -D
  • 01:引入
    • 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()]
})

02:tsconfig.json 配置文件

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

经过上述的配置就可以使用 ts了

测试tsx 新建一个App.tsx页面

再App.vue文件之中引入使用

<template>
  <!-- <Layout></Layout> -->
  <renderDom />
</template>

<script setup lang="ts">
// import Layout from './layout/Layout.vue'
import renderDom from './App.tsx'
</script>
<style lang="scss">
html,
body,
#app {
  height: 100%;
  width: 100%;
  overflow: hidden;
}
</style>

tsx使用v-model指令 (App.tsx组件)

import { ref } from "vue"
let test = ref<string>("")
const renderDom = () => {
  // 注意点:在tsx之中 不会自动读写 X.value
  return (
    <div>
      <input type="text" v-model={test.value} />
      <div>我是{test.value }</div>
    </div>

  )
}
export default renderDom

效果

使用v-show、与三目运算符

  • tsx是支持v-show指令
  • tsx不支持v-if、v-else指令,这时候需要使用到三目运算符了
import { ref } from "vue"

let flag = ref<Boolean>(true)
const renderDom = () => {
  // 注意点:在tsx之中 不会自动读写 X.value
  return (
    <div>
      <div v-show={flag}>我是true</div>
      <div v-show={!flag}>我是flase</div>
      <div>
        {
          flag ? <div>我是true</div> : <div>我是flase</div>
        }
      </div>
    </div>

  )
}

export default renderDom

效果

tsx之数组的遍历(map)

  • tsx是不支持 v-for指令的
  • 使用map的方式去遍历数组,然后map函数之中返回一个 div等标签渲染dom节点
import { reactive, ref } from "vue"

let arr = reactive<Number[]>([1,2,3])
const renderDom = () => {
  return (
    <div>
      <div>
        {
          arr.map((item,idx)=>{
            return(
              <div key={idx}>{ item }</div>
            )
          })
        }
      </div>
    </div>

  )
}
export default renderDom

效果

自定义属性 data-index

给当前标签自定义属性用于数据的传递

import { reactive, ref } from "vue"

let arr = reactive<Number[]>([1,2,3])
const renderDom = () => {
  return (
    <div>
      <div>
        {
          arr.map((item,idx)=>{
            return(
              <div key={idx} data-index={idx}>{ item }</div>
            )
          })
        }
      </div>
    </div>

  )
}

export default renderDom

效果

tsx绑定事件

使用onClick定义事件

  • 不传递参数的时候,直接定义这个click事件即可
  • 若是传递参数的时候,需要使用bind来改变this的指向,并且不自觉调用函数,而是返回一个新的函数,可以传递参数,等待点击的时候触发事件
import { reactive, ref } from "vue"

let arr = reactive<Number[]>([1,2,3])
const renderDom = () => {
  return (
    <div>
      <div>
        {
          arr.map((item,idx)=>{
            return(
              // <div key={idx} data-index={idx} onClick={TestClick}>{ item }</div> // 没有传参
              // <div key={idx} data-index={idx} onClick={TestClick()}>{ item }</div> // 直接调用
              <div key={idx} data-index={idx} onClick={TestClick.bind(this,item)}>{ item }</div>
            )
          })
        }
      </div>
    </div>

  )
}
const TestClick = (item)=>{
  console.log("111",item);

}

export default renderDom

tsx之 props父组件向子组件传递参数

App.vue 父

再vue之中,使用 v-bind的形式传递数据

<template>
  <renderDom :title="title" />
</template>

<script setup lang="ts">
import { ref } from 'vue'
import renderDom from './App.tsx'
let title = ref<String>('我是测试的t')
</script>

App.tsx 子

import { reactive, ref } from "vue"

type Props = {
  title : string
}
const renderDom = (props:Props) => {
  return (
    <div>
      <div>我是title - { props.title }</div>
    </div>

  )
}
export default renderDom

效果

tsx之子组件 向父组件 传递数据

点击11 传递当前11数据

子组件 App.tsx

import { reactive, ref } from "vue"

type Props = {
  title : string
}
let arr = reactive<number[]>([11,22,33])
// props是接受父组件传递来的值,ctx:为上下文对象
const renderDom = (props:Props,ctx:any) => {
  return (
    <div>
      <div>我是title - { props.title }</div>
      <div>
        {
          arr.map((item,idx)=>{
            return (
              <div onClick={ itemClick.bind(this,ctx,item) }>{  item }</div>
            )
          })
        }
      </div>
    </div>

  )
}
// 点击事件
const itemClick = (ctx:any,item:any)=>{
  ctx.emit("on-click",item) // 使用ctx之中的emit发射事件,给父组件传递数据
}

export default renderDom

App.vue 父

<template>
  <!-- <Layout></Layout> -->
  <renderDom :title="title" @on-click="getData" />
</template>

<script setup lang="ts">
// import Layout from './layout/Layout.vue'
import { ref } from 'vue'
import renderDom from './App.tsx'
let title = ref<String>('我是测试的t')
// 接受子组件 自定义事件 传递来的数据
const getData = (parmas) => {
  console.log('getData', parmas)
}
</script>

总结

到此这篇关于vue3.0实践之写tsx语法的文章就介绍到这了,更多相关vue3.0写tsx语法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于vue-cli3+typescript的tsx开发模板搭建过程分享

    项目创建 使用 vue-cli3+ 创建一个基于 ts 的模板: vue-tsx-support 上一步中已经创建完了基于 ts 的 vue 模板,但是开发方式还是如同之前的 template 一样,只是将 script 中的 js 部分改成了 ts 来书写.接下来就将 模板(template) 方式改成 tsx 的方式,这里需要借助一个库 -- vue-tsx-support 首先安装 vue-tsx-support : npm install vue-tsx-support --save #

  • vue3+vite使用jsx和tsx详情

    目录 安装@vitejs/plugin-vue-jsx 配置vite.config.js 使用实战 第一种写法使用this 第二种写法 第三种写法 安装@vitejs/plugin-vue-jsx yarn add -D @vitejs/plugin-vue-jsx npm i -D @vitejs/plugin-vue-jsx 配置vite.config.js ... import vueJsx from '@vitejs/plugin-vue-jsx'; export default def

  • vue3.0实践之写tsx语法实例

    目录 测试tsx 新建一个App.tsx页面 tsx使用v-model指令 (App.tsx组件) 使用v-show.与三目运算符 tsx之数组的遍历(map) 自定义属性 data-index tsx绑定事件 tsx之 props父组件向子组件传递参数 App.vue 父 App.tsx 子 tsx之子组件 向父组件 传递数据 子组件 App.tsx App.vue 父 总结 00:下载 yarn add @vitejs/plugin-vue-jsx -D 01:引入 vite.config.

  • vue3.0路由自动导入的方法实例

    一.前提 我们使用的是require.context方法导入,在vite创建的项目内使用会报错"require not found",所以必须用webpack创建项目.或者有大能可以说说vite怎么解决这个问题. 二.规则 我们使用的规则是,搜索src/views/路径下的所有目录和子目录,搜索文件名叫做"index.vue"的文件,使用上级目录的名字作为组件名,进行注册.结构如下: 和公共组件注册一样,我们只注册index.vue组件,其他名称的组件不进行注册.

  • vue3.0中的watch侦听器实例详解

    目录 前言 侦听器和计算属性的区别 vue3如何使用watch呢? 基本使用 监听多个响应式数据 侦听reactive定义的响应式数据 监听reactive定义的响应式数据的某一个属性 配置选项用法 总结 前言 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器.这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化.当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的. 侦听器和计算属性的区别 计算属性里不可以做异步操作,侦听器可以做异步操作

  • vue3.0 上手体验

    vue3.0 beta 版本已经发布有一阵子了,是时候上手体验一波了- 注意,本文所有演示都是基于 vue3.0 beta 版本,不保证后续正式版 api 不改动.等官方文档出来后,以官网为准. 环境搭建 直接使用脚手架,如果本地没有安装的可以执行脚手架安装命令: npm install -g @vue/cli 如果本地安装过的,可以尝试更新一下: npm update -g @vue/cli 测试 vue-cli 版本: vue -V @vue/cli 4.4.1 接下来创建一个vue项目:

  • Vue3编程流畅技巧使用setup语法糖拒绝写return

    目录 Vue3.2 setup语法糖 1.<script setup>在<template/>使用 2.<script setup>引入组件将自动注册 3.组件通信: defineProps 代替props defineEmit 代替emit 4.<script setup>需主动向父组件暴露子组件属性 :defineExpose 5.语法糖其他功能 6.在setup访问路由 Vue3.2 setup语法糖 Vue3.2 setup语法糖 [ 单文件组件的语

  • Vue3.0手写轮播图效果

    本文实例为大家分享了Vue3.0手写轮播图效果的具体代码,供大家参考,具体内容如下 让我们开始把 html结构 <template> <div class="xtx-carousel" @mouseleave="enterFn" @mouseenter="leaveFn"> <ul class="carousel-body"> <li class="carousel-item

  • vue3.0中setup的两种用法实例

    目录 前言 一.setup函数的特性以及作用 二.setup函数的注意点: 用法1:结合ref使用 用法2:代码分割 总结 前言 这篇文章主要介绍了vue3.0中setup使用,本文通过两种用法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 什么是setup setup是vue3新增的生命周期函数,setup的加入就是为了让vue3使用组合式API(Composition API).使用组合式API更符合大型项目的开发,通过setup可以将该部分抽离成函数,

  • vue3.0+vue-router+element-plus初实践

    Vue3中文文档 Vue3.0对比Vue2.x优势 框架内部做了大量的性能优化,包括:虚拟dom,编译模板,Proxy的新数据监听,更小的打包文件等. 新增的组合式API(即Composition API),更适合大型项目的编写方式. 对TypeScript支持更好,去掉this操作,更强大的类型推导. 初始化项目 安装@vue/cli npm install @vue/cli -g 或 yarn global add @vue/cli 创建项目 vue create 项目名 可以选择Vue3的

  • Vue3.0写自定义指令的简单步骤记录

    前言 vue中提供了丰富的内置指令,如v-if,v-bind,v-on......,除此之外我们还可以通过Vue.directive({})或者directives:{}来定义指令 在开始学习之前我们应该理解,自定义指令的应用场景,任何功能的开发都是为了解决具体的问题的, 通过自定义指令,我们可以对DOM进行更多的底层操作,这样不仅可以在某些场景下为我们提供快速解决问题的思路,而且让我们对vue的底层有了进一步的了解 第一步 在main.js 在src下简历对应的文件夹 import Direc

  • Vue3.0 手写放大镜效果

    需要实现的效果是: 固定放大两倍,鼠标进入到左侧图片区域的时候,遮罩层显示,离开时,遮罩层隐藏. css中的cursor 鼠标跟随效果如何实现: (子绝父相)绝对定位 +  修改top,left控制移动 在@vueuse中,有一个工具方法:useMouseInElement <template> <div ref="target"> <h1>Hello world</h1> </div> </template> &

随机推荐