vue3第二十四节(JSX用法)

ops/2025/3/4 16:48:54/

vite 创建项目的情况下
安装

javascript">npm i @vitejs/plugin-vue-jsx -D

配置vite.config.js

javascript">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()],
})

1、什么是 JSX

JSX是一种JavaScript的语法扩展,它允许在JavaScript代码中直接编写类似HTML的标记结构。Vue 3中提供了对JSX的原生支持,使得开发人员可以使用JSX编写Vue组件的模板

虽然最早是由 React 引入,但实际上 JSX 语法并没有定义运行时语义,并且能被编译成各种不同的输出形式。如果你之前使用过 JSX 语法,那么请注意 Vue 的 JSX 转换方式React 中 JSX 的转换方式**不同**,因此你不能在 Vue 应用中使用 React 的 JSX 转换。与 React JSX 语法的一些明显区别包括:

a可以使用 HTML attributes 比如 classfor 作为 props - 不需要使用 classNamehtmlFor
b传递子元素给组件 (比如 slots) 的方式不同

2、jsx 与 template 的区别

语法上有很大区别
JSX 本质就是 js 代码,可以使用 js 的任何能力
template 只能嵌入简单的 js 表达式,其他需要指令,如 v-if、for();
而JSX 中循环使用map(), 条件使用 三元运算、&& 、|| 运算符
JSX 已经成为 ES 规范,template 还是 Vue 自家规范
template 中使用的是 {{}} 双大括号,JSX 中使用的是 { } 单大括号,插值语法
本质是相同的
都会被编译为 js 代码(render 函数)

3、基本用法 在 vue3 setup 语法糖中使用jsx

父组件:

javascript"><template><div ref="myDivRef"><myCom :lists="lists"></myCom></div>
</template>
<script setup lang="jsx">
import { ref, computed, watch, onMounted } from 'vue'
// 引入子组件
import myCom from './jsxCom.vue'
// import myCom from './index.jsx'
const myDivRef = ref('myDivRef')
const lists = ref([1, 2, 3, 4, 5])
const fun = () => {<div>{lists.value.map(itm => {return <div key={itm}>name--{itm}</div>})}</div>
}
</script>

子组件:

javascript"><template>
<div class="222"><myComponent :lists="lists" ></myComponent>
</div>
</template>
<!-- setup 语法糖中使用 jsx 声明lang="jsx" -->
<script setup lang="jsx">
import { ref, defineComponent } from 'vue'
const props = defineProps({lists: Array
})
// const lists = ref([1, 2, 3, 4])
// 使用 defineComponent 定义组件
const myComponent = defineComponent({name: 'myComponent',props: {lists: Array},setup() {return () => (<div>{props.lists.value.map(itm => {return <div key={itm}>name--{itm}</div>})}</div>)}
})
</script>

自定义组件 还可以是 jsx文件

javascript">// index.jsx 文件
import { defineComponent } from 'vue'
export default defineComponent({props: {lists: Array},setup(props) {const render = () => [<div>{props.lists.map(itm => {return <div data-num={itm} key={itm} >name--{itm}</div>})}</div>]return render}
})

4、属性和事件 循环

JSX中的属性 使用为 如 key={value}不需要前面加冒号(:)
JSX中的方法 使用为 如 onClick={()=>{}} 为驼峰命名方法;以on开始,如 onClick

如需要修饰符:.passive、.capture 和 .once 等事件修饰符

javascript"><div onClickCapture={() => myClick()} />

对于事件和按键修饰符,可以使用 withModifiers 函数:

javascript"><div onClick={withModifiers(() => {}, ['self'])} />

循环使用map() 语法;而template语法中,需要使用v-for

javascript"><template>
<div class="222"><myComponent :lists="lists" ></myComponent>
</div>
</template>
<script setup lang="jsx">
import { ref, defineComponent } from 'vue'
const props = defineProps({lists: Array
})
const lists = ref([1, 2, 3, 4])
const myComponent = defineComponent({name: 'myComponent',props: {lists: Array},setup() {const myClick = (itm) => {console.log(itm)}return () => [<div>{props.lists.map(itm => {return itm % 2 === 0 && <div key={itm} onClick={() => myClick(itm)}>name--{itm}</div>})}</div>]}
})
</script>

5、使用运算符

如:&& 运算符 三元运算符

javascript"><template>
<div class="222"><myComponent :lists="lists" ></myComponent>
</div>
</template>
<script setup lang="jsx">
import { ref, defineComponent } from 'vue'
const props = defineProps({lists: Array
})
const lists = ref([1, 2, 3, 4])
const myComponent = defineComponent({name: 'myComponent',props: {lists: Array},setup() {const myClick = (itm) => {console.log(itm)}return () => [<div>{props.lists.map(itm => {// return <div key={itm} onClick={() => myClick(itm)}>name--{itm}</div>// 使用 && 运算符return itm % 2 === 0 && <div key={itm} onClick={() => myClick(itm)}>name--{itm}</div>})}</div>]}
})
</script>

三元运算:

javascript">……
return () => [<div>{props.lists.map(itm => {return itm % 2 ===0 ? <div key={itm} onClick={() => myClick(itm)}>name--{itm}</div> : <div key={`${itm}-1`} onClick={() => myClick(`${itm}-1`)}>name--{`${itm}-1`}</div>})}</div>]
……

http://www.ppmy.cn/ops/15671.html

相关文章

如何批量跟踪京东物流信息

随着电商行业的快速发展&#xff0c;快递业务日益繁忙&#xff0c;无论是商家还是消费者&#xff0c;都需要一种高效、便捷的快递查询工具。快递批量查询高手软件应运而生&#xff0c;以其强大的功能和便捷的操作体验&#xff0c;赢得了广大电商、微商精英们的青睐。 快递批量…

WebRTC初识

1. 概念 WebRTC (Web-Real-Time Communications) 是一项实时的通讯及技术&#xff0c;它允许网络应用或站点在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流、音频流或其他任意数据的传输。这种技…

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色。 先看效果图&#xff1a; 在CSS中&#xff0c;你可以使用border属性或者background属性来画一条虚线。以下是两种常见的方法&#xff1a; 方法一&#xff1a;使用border属性 你可以设置一个元素的border…

SpringCloud系列(15)--Eureka自我保护

前言&#xff1a;在上一章节中我们说明了一些关于Eureka的服务发现功能&#xff0c;也用这个功能进行接口的实现&#xff0c;在本章节则介绍一些关于Eureka的自我保护 1、Eureka保护模式概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。默认情况…

Pow(x,n)——力扣

python&#xff08;快速幂&#xff09; 50. Pow(x, n) 已解答 中等 相关标签 相关企业 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;10…

前端网络安全面试题:CSRF 与 XSS

CSRF 什么是 CSRF CSRF (Cross-Site Request Forgery)&#xff1a; 跨站请求伪造是一种攻击手段&#xff0c;攻击者通过恶意构造一个链接或表单&#xff0c;诱使用户在已登录的目标网站上执行非本意的操作。当用户点击或提交这个恶意内容时&#xff0c;浏览器会自动带上用户的…

深度学习与神经网络入门

前言 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09;与深度学习&#xff08;DL&#xff09;的关系&#xff1a; DL包含于ML&#xff0c;ML包含于AI。 即深度学习是机器学习一部分&#xff0c;机器学习又是人工智能的一个分支。 那么深度学习到底有…

perftto用法

主要是对里面的方法进行的总结 一 抓取方法&#xff1a; 1 log中搜 boot_pro就能看每个阶段的时长 2 sys/kenel/boot_api也能看时长 3 抓取perfetto查看&#xff0c;这个要加上kenel及之前的时间。 perfetto 使用方法&#xff1a; 这个文件在/system/core/init/底下&#xf…