iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Vue3中使用jsx/tsx
  • 467
分享到

怎么在Vue3中使用jsx/tsx

2023-07-05 16:07:28 467人浏览 八月长安
摘要

今天小编给大家分享一下怎么在vue3中使用jsx/tsx的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JSX 如何用这里以v

今天小编给大家分享一下怎么在vue3中使用jsx/tsx的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

JSX 如何用

这里以vite项目为例,要想在项目中使用 JSX,我们需要安装一个插件@vitejs/plugin-Vue-jsx,这个插件可以让我们在项目中使用 JSX/TSX

npm i @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";// https://vitejs.dev/config/export default defineConfig({  plugins: [vue(), vueJsx()],});

接下来我们看一下如何使用 JXS?

首先第一种方式就是在.vue文件中使用,需要将 script 中的 lang 设置为tsx,在 setup 函数中返回模板

<script lang="tsx">import { defineComponent } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    return () => <div>Hello World</div>;  },});</script>

或者将.vue改成.tsx,注意:如果后缀为.tsx,需要将引入到这个组件的路径后缀去掉

import { defineComponent } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    return () => <div>Hello World</div>;  },});
//main.ts中引入import { createApp } from "vue";import "./style.CSS";import App from "./App";createApp(App).mount("#app");

此时页面上就会展示一个Hello World

第二种方式是函数式组件,因为函数式组件里没有 this 引用,所以 Vue 把 props 当作第一个参数传入,第二个参数 ctx 包含三个属性:attrs、emit 和 slots。它们分别相当于组件实例的 attrs、attrs、attrs、emit 和 $slots 这几个属性。

//App.tsxexport default (props, ctx) => <div>Hello World</div>;

到这里我们不难发现,TSX 相比于 SFC 有一个特点,那就是它可以在一个文件中定义多个组件模板,比如

const Component1 = () => <div>Component1</div>;const Component2 = () => <div>Component2</div>;export default () => (  <div>    <Component1 />    <Component2 />  </div>);

此时页面中便出现了我们定义的两个组件

怎么在Vue3中使用jsx/tsx

接下来我们来看一下 JSX 在 vue 中的具体用法

插值

在 SFC 中使用插值的时候我们可以使用{{}}进行包裹,而在 JSX 中是使用{}进行包裹,例如

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    const text = ref("Hello World");    return () => <div>{text.value}</div>;  },});

这里需要注意的是在 SFC 模板中是不需要加.value的,但是 JSX 模板中则需要加.value

条件渲染(v-if)

在 SFC 中我们可以使用v-if进行条件渲染,如

<div>  <div v-if="showyes">yes</div>  <span v-else>no</span></div>

而在 JSX 中则没有了v-if,而是采用更接近原生的写法

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    const showyes = ref(true);    return () => <div>{showyes.value ? <div>yes</div> : <div>no</div>}</div>;  },});

除了v-if,大家可能还会想到另一个条件渲染方式v-show,JSX 中是支持使用v-show

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    const showyes = ref(true);    return () => (      <div>        <div v-show={showyes.value}>yes</div>        <div v-show={!showyes.value}>no</div>      </div>    );  },});

列表循环(v-for)

在 SFC 中我们经常使用v-for进行列表循环渲染,如

<ul>  <li v-for="{ index, item } in list" :key="index">{{ item }}</li></ul>

而在 JSX 中我们则需要改成使用 map 进行列表循环渲染

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    const list = ref(["one", "two", "three"]);    return () => (      <div>        {list.value.map((item, index) => (          <div key={index}>{item}</div>        ))}      </div>    );  },});

注意,JSX 中列表循环也是要加 key 的

事件绑定

事件绑定其实 JSX 与 SFC 就是写法上的区别,以click为例,在 SFC 中使用@click或者v-on:click进行事件绑定,在 JSX 中则使用onClick进行事件绑定

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    return () => (      <div        onClick={() => {          console.log("我被点击");        }}      >        点击      </div>    );  },});

这里需要注意绑定的函数要使用箭头函数

事件修饰符

事件修饰符可以使用 vue 提供的withModifiers进行设置,如.self

import { defineComponent, ref, withModifiers } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    return () => (      <div        onClick={withModifiers(() => {          console.log("我被点击");        }, ["self"])}      >        点击      </div>    );  },});

但是对于 .passive、.capture 和 .once 事件修饰符,使用withModifiers并不生效,这里可以采用链式驼峰的形式进行设置,不如.once

import { defineComponent } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    return () => (      <div        onClickOnce={() => {          console.log("我被点击");        }}      >        点击      </div>    );  },});

v-model

v-model 在绑定modelValue或者在input标签中使用的时候其实和 SFC 差不多

import { defineComponent, ref } from "vue";export default defineComponent({  name: "app",  setup(props, ctx) {    const num = ref(0);    return () => <input type="text" v-model={num.value} />;  },});

当在组件中使用绑定自定义事件的时候和 SFC 就有了区别,比如绑定一个msg,在 SFC 中直接v-model:msg即可,而在 JSX 中则需要使用一个数组。我们直接看下面两个例子你就会明白,假如我们组件名叫ea_button,这个组件发送了一个update:changeMsg的方法,父组件的msg变量需要接受update:changeMsg函数传来的参数

SFC:

<ea-button v-model:changeMsg="msg"></ea-button>

JSX:

<ea-button v-model={[msg.value, 'changeMsg']}></ea-button>

插槽

先看下默认插槽,我们定义一个子组件 Child 接收一个默认插槽

import { defineComponent, ref } from "vue";const Child = (props, { slots }) => {  return <div>{slots.default()}</div>;};export default defineComponent({  name: "app",  setup(props, ctx) {    const num = ref(0);    return () => <Child>默认插槽</Child>;  },});

如果想使用具名插槽则需要在父组件中传入一个对象,对象的 key 值就是插槽的名字

import { defineComponent, ref } from "vue";//@ts-ignoreconst Child = (props, { slots }) => {  return (    <div>      <div>{slots.slotOne()}</div>      <div>{slots.slotTwo()}</div>      <div>{slots.slotThree()}</div>    </div>  );};export default defineComponent({  name: "app",  setup(props, ctx) {    const num = ref(0);    return () => (      <Child>        {{          slotOne: () => <div>插槽1</div>,          slotTwo: () => <div>插槽2</div>,          slotThree: () => <div>插槽3</div>,        }}      </Child>    );  },});

如果我们想在父组件的插槽内容中获取到子组件中的变量,此时便涉及到了作用域插槽。在 JSX 中我们可以在子组件调用默认插槽或者某个具名插槽的时候传入参数,如下面的插槽一为例

import { defineComponent, ref } from "vue";//@ts-ignoreconst Child = (props, { slots }) => {  const prama1 = "插槽1";  return (    <div>      <div>{slots.slotOne(prama1)}</div>      <div>{slots.slotTwo()}</div>      <div>{slots.slotThree()}</div>    </div>  );};export default defineComponent({  name: "app",  setup(props, ctx) {    return () => (      <Child>        {{          slotOne: (pramas: string) => <div>{pramas}</div>,          slotTwo: <div>插槽2</div>,          slotThree: <div>插槽3</div>,        }}      </Child>    );  },});

我们可以看到prama1=插槽1是子组件中的变量,我们通过slots.slotOne(prama1)将其传到了父组件的插槽内容中

以上就是“怎么在Vue3中使用jsx/tsx”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: 怎么在Vue3中使用jsx/tsx

本文链接: https://www.lsjlt.com/news/352959.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Vue3中使用jsx/tsx
    今天小编给大家分享一下怎么在Vue3中使用jsx/tsx的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JSX 如何用这里以v...
    99+
    2023-07-05
  • 一文详解如何在Vue3中使用jsx/tsx
    目录JSX 如何用插值条件渲染(v-if)列表循环(v-for)事件绑定事件修饰符v-model插槽最后我们都知道,通常情况下我们使用 vue 大多都是用的 SFC(Signle F...
    99+
    2023-03-23
    Vue3使用jsx/tsx Vue3 jsx/tsx Vue jsx tsx
  • vue3+vite使用jsx和tsx详情
    目录安装@vitejs/plugin-vue-jsx配置vite.config.js使用实战第一种写法使用this第二种写法第三种写法安装@vitejs/plugin-vue-jsx...
    99+
    2024-04-02
  • 如何在vue3中优雅的使用jsx/tsx详解
    目录前言安装插件(@vitejs/plugin-vue-jsx)1、插值2、class与style 绑定3、条件渲染4、列表渲染5、事件处理6、v-model7、slot插槽8、使用...
    99+
    2024-04-02
  • 怎么在vue3中使用jsx语法
    今天小编给大家分享一下怎么在vue3中使用jsx语法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。背景vue3项目中 推进使...
    99+
    2023-07-05
  • 如何在vue3中使用jsx语法
    目录背景语法一丶 普通内容二丶 动态变量三丶 函数事件1.基本用法2.参数进阶四丶 ref绑定五丶 v-model语法六丶 v-slots语法七丶 v-for语法八丶 v-if语法九...
    99+
    2023-03-06
    vue3使用jsx语法 vue jsx语法
  • vue3中如何使用JSX
    这篇文章主要介绍了vue3中如何使用JSX的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3中如何使用JSX文章都会有所收获,下面我们一起来看看吧。在绝大多数情况下,Vue 推荐使用模板<templa...
    99+
    2023-07-04
  • 详解Vue3+Vite中怎么使用JSX
    虽然 jsx 最早是由 React 引入,但实际上 JSX 语法并没有定义运行时语义,并且能被编译成各种不同的输出形式。如果你之前使用过 JSX 语法,那么请注意 Vue 的 JSX 编译方式与 React 中 JSX 的编译方式不同,因此...
    99+
    2023-05-14
    Vue vue3 vite JSX
  • Vue3+Vite中如何使用JSX
    这篇文章主要介绍“Vue3+Vite中如何使用JSX”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3+Vite中如何使用JSX”文章能帮助大家解决问题。JSX介绍JSX(JavaScript ...
    99+
    2023-07-04
  • 怎么在Vue中使用JSX
    本篇内容主要讲解“怎么在Vue中使用JSX”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Vue中使用JSX”吧!简介先举一个例子来说明为什么 JSX 是好...
    99+
    2024-04-02
  • Vue3如何使用JSX
    这篇文章主要介绍“Vue3如何使用JSX”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3如何使用JSX”文章能帮助大家解决问题。1. Vue3 中 JSX 的基本应用使用 .jsx 格式文件和...
    99+
    2023-07-05
  • 一文详解如何在Vue3+Vite中使用JSX
    目录JSX介绍在 Vue3 中使用 JSX安装插件(@vitejs/plugin-vue-jsx)新建 jsx 文件语法补充知识:注意事项总结JSX介绍 JSX(JavaScript...
    99+
    2023-02-16
    vue3 vite使用jsx vue3+vite 前端 vite搭建vue3
  • 一文掌握在Vue3中书写TSX的使用方法
    目录插件安装与文件配置tsx语法格式tsx语法注意事项在vue2的时候就已经可以使用 jsx 语法,但是不是很友好,写起来是一件很痛苦的事情,所以你很少见到有人会在vue2中书写 j...
    99+
    2023-05-20
    vue3  TSX Vue3书写TSX
  • 如何在vue3中同时使用tsx与setup语法糖
    目录前言Tsx与setup语法糖的优势遇到的问题最后前言 想这样做的原因是在vue3里使用tsx开发时,props的声明显得异常麻烦,不禁想到defineProps的便利,但同时在v...
    99+
    2024-04-02
  • 怎么使用Vue3 SFC和TSX方式调用子组件中的函数
    今天小编给大家分享一下怎么使用Vue3 SFC和TSX方式调用子组件中的函数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-04
  • 一文详解vue3中使用JSX的方法
    在 Vue 3 的项目开发中,template 是 Vue 3 默认的写法。虽然 template 长得很像 HTML,但 Vue 其实会把 template 解析为 render 函数,之后,组件运行的时候通过 render 函数去返回虚...
    99+
    2022-11-25
    JSX Vue vue3
  • vue3 中使用 jsx 开发的详细过程
    目录安装 JSX 插件使用语法差异模板指令事件修饰符v-forv-on插槽安装 JSX 插件 在 Vue2 中要想使用 jsx 开发,需要安装 @vue/babel-preset-j...
    99+
    2024-04-02
  • Vite创建Vue3项目及Vue3使用jsx的方法
    使用 yarn:yarn create @vitejs/app使用 npm:npm init @vitejs/app1. 输入项目名称这里输入我们的项目名称:vite-vue32. 选择框架这里选择我们需要集成的框架:vuevanilla:...
    99+
    2023-05-22
    Vue3 vite jsx
  • 详解在vue3中使用jsx的配置以及一些小问题
    目录配置模版语法v-if/v-show配置 在vue3中使用jsx十分方便,只需要安装官方的@vitejs/plugin-vue-jsx插件,在vite.config.ts中配置 /...
    99+
    2024-04-02
  • vuex在vue3中怎么使用
    这篇文章主要介绍“vuex在vue3中怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vuex在vue3中怎么使用”文章能帮助大家解决问题。在vue3中,vuex用于储存和管理所有组件的状态,...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作