vue3第二十四节(JSX用法)

vite 创建项目的情况下
安装

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

配置vite.config.js

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

父组件:

<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>

子组件:

<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文件

// 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 等事件修饰符

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

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

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

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

<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、使用运算符

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

<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>

三元运算:

……
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.mzph.cn/web/3395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程——TCP的特性之自动重传/流量控制/拥塞控制,一篇说清楚

文章目录 1. ARQ自动重传协议1.1 停止等待ARQ1.2 连续ARQ1.3 总结 2. TCP的流量控制3. TCP的拥塞控制3.1 慢开始算法3.2 拥塞避免算法3.3 快重传算法3.4 快恢复算法 1. ARQ自动重传协议 自动重传请求&#xff08;Automatic Repeat-reQuest&#xff09;&#xff0c;通过使用确认…

前端获取文件后缀名

function getFileExtension(filename) {var parts filename.split(.);if (parts.length > 1) {return parts.pop();} else {return ;} }// 使用例子 var filename "example.png"; var extension getFileExtension(filename); console.log(extension); // 输出:…

免费的在线视频编辑工具,mp4转gif工具

在线视频编辑&#xff1a;https://online-video-cutter.com/change-video-speed&#xff0c;可以加速视频。 mp4转gif&#xff1a;MP4轉GIF轉換器。在线自由 — Convertio MP4 To GIF | Convert MP4 To GIF Images Online - XConvert

flex:1给了我工作机会

今天就跟大家讲讲flex&#xff1a;1是什么的缩写&#xff0c;怎么去理解这个样式。 首先要知道flex:1就是 flex-grow: 1; flex-shrink: 1; flex-basis: 0;的缩写&#xff0c;首页要理解它们的作用&#xff0c;先看dom解构 <div class"parent"><div class&q…

vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计

Versal 串行 I/O 硬件调试流程 Versal ™ ACAP 无需再生成 IBERT IP &#xff0c; 因为使用系统内串行 I/O 调试所需的必要逻辑现已集成到 GTY 收发器架构内。使 用 GTY 收发器的任何设计均可用于串行 I/O 硬件调试。 Versal 串行 I/O 硬件调试流程具有 2 个不同阶…

lesson04:类和对象(下)

1. 再谈构造函数 2.static成员 3.友元 4.内部类 5.匿名对象 1. 再谈构造函数 1.1构造函数体内赋值 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Date { public:Date(int year, int month, int day){_year year;_month mont…

Oceanbase体验之(二)Oceanbase集群的搭建(社区版4.2.2)

资源规划 3台observer CPU:4C及以上 内存&#xff1a;32G及以上 硬盘操作系统500G 存储盘1T及以上 虚拟机可以直接划分&#xff0c;物理机需要提前规划好资源 一、上传oceanbase安装包 登录ocp选择软件包管理 上传Oceanbase软件包&#xff08;软件包获取路径 官网免费下载社…

动态规划和递归法求解斐波那契数列

动态规划是把复杂问题分解为相对简单的子问题来求解,动态规划旨在解决具有重叠子问题和最优子结构特性的问题,它的核心思想是解决每个子问题仅能一次,并存储其解,以便需要时直接查找,从而避免重复计算 基本概念: 1.重叠子问题: 问题可以分解为多个子问题,且这些子问题有些会被多…

【量化】基于遗传规划的因子自动挖掘系统

最后&#xff1a;策略达到了23.6%的年化收益&#xff0c;夏普比率达到5.87&#xff0c;最大回撤为-4.3%&#xff0c;平局年换手率为27.45 倍&#xff0c;平均持股数量为543 支。 文末有回测结果。 目录 1.模型思想 1.1遗传规划算法介绍 ​1.2因子测试流程 2.代码与实现 2.1…

云原生Kubernetes: K8S 1.29版本 部署Nexus

目录 一、实验 1.环境 2.搭建NFS 3. K8S 1.29版本 部署Nexus 二、问题 1.volumeMode有哪几种模式 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K…

【yolo算法道路井盖检测】

yolo算法道路井盖检测 数据集和模型yolov8道路井盖-下水道井盖检测训练模型数据集pyqt界面yolov8道路井盖-下水道井盖检测训练模型数据集 算法原理 1. 数据集准备与增强 数据采集&#xff1a;使用行车记录仪或其他设备收集道路井盖的图像数据。数据标注&#xff1a;对收集到…

如何看待AIGC技术?【模板】

如何看待AIGC技术&#xff1f; 简介&#xff1a;探讨AIGC技术的发展现状和未来趋势。 提醒&#xff1a;在发布作品前&#xff0c;请把不需要的内容删掉。 方向一&#xff1a;技术应用 提示&#xff1a;分享AIGC技术在各个领域的应用情况&#xff0c;以及对未来社会的影响和可能…

网络协议深度解析:SSL、 TLS、HTTP和 DNS(C/C++代码实现)

在数字化时代&#xff0c;网络协议构成了互联网通信的基石。SSL、TLS、HTTP和DNS是其中最关键的几种&#xff0c;它们确保了我们的数据安全传输、网页的正确显示以及域名的正常解析。 要理解这些协议&#xff0c;首先需要了解网络分层模型。SSL和TLS位于传输层之上&#xff0c…

【Java--数据结构】链表经典OJ题详解(上)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 谈谈头插、头删、尾插、头插的时间复杂度 反转一个单链表 链表的中间结点 返回倒数第k个结点 合并两个链表 谈谈头插、头删、尾插、头插的时间复杂度 头插和头删的时…

HtmlCss 基础总结(基础好了才是最能打的)一

Html&Css 基础学习回顾总结 one day~ 文章目录 Html&Css 基础学习回顾总结前言开始啦Html 骨架Html 基本标签H1-H6标签段落标签换行标签水平线标签图像标签相对路径&绝对路径 和音频视频标签超链接标签 总结 前言 作者在求学期间自学了前端界面相关的&#xff0c…

【数据结构】图基本概念

在计算机科学中&#xff0c;图&#xff08;Graph&#xff09;是一种非常重要的数据结构&#xff0c;用于描述各种复杂的关系和网络。本文将介绍图的基本概念&#xff0c;并通过C语言代码演示如何实现基本的图结构和相关操作。 图的基本概念&#xff1a; 图由节点&#xff08;…

使用react-vant上传图片遇到的问题

使用react-vant Uploader上传图片后出现的问题。 先试用upload上传图片。 <Form.Itemrules{[{ required: true, message: 请上传头像 }]}label上传头像namefiles><Uploader accept* maxCount"1" onChange{imgFile} /></Form.Item> 图片上传成功后…

高频SQL 判断三角形

题目信息 表&#xff1a;Triangle ------------------- | Column Name | Type | ------------------- | x | int | | y | int | | z | int | ------------------- 在 SQL 中&#xff0c;(x, y, z)是该表的主键列。 该表的每一行包含三个线段…

Linux网络-DNS域名解析服务

目录 一.DNS相关介绍 1.DNS是什么 2.DNS系统的分布式数据结构 根域 顶级域 二级域 子域 主机 3.服务器类型 主域名服务器 从域名服务器 缓存域名服务器 转发域名服务器 二.DNS域名解析 1.DNS域名解析方式及功能 2.DNS域名解析查询方式 2.1.递归查询&#xff0…