返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue3使用JSX的方法实例(笔记自用)
  • 234
分享到

Vue3使用JSX的方法实例(笔记自用)

vue3使用jsx组件vue3使用jsxvue jsx 2023-02-23 11:02:01 234人浏览 安东尼
摘要

目录1. vue3 中 jsX 的基本应用1.1 在 .Vue 文件中使用 jsx1.2 .jsx文件格式2. JSX 和 template 的区别2.1 插值2.2 自定义组件2.

1. Vue3 中 JSX 的基本应用

  • 使用 .jsx 格式文件和 defineComponent
  • defineComponent 可传入 setup 函数 或 组件的配置
  • 插值使用单括号 {}

1.1 在 .vue 文件中使用 jsx

// 父
 
<template>
  <div class="home">
    <JSXDemo1 />
  </div>
</template>
 
<script>
import JSXDemo1 from '@/components/JSXDemo1.vue'
export default {
  name: 'HomeView',
  components: {
    JSXDemo1
  }
}
</script>
 
// JSXDemo1.vue
 
<script>
import { ref } from 'vue'
export default {
  setup () {
    const countRef = ref(200)
 
    const render = () => {
      return <p>DEMO1--{countRef.value}</p> // jsx就是js语法,所以要加 .value
    }
    return render
  }
}
</script>

1.2 .jsx文件格式

// 父组件
 
import { defineComponent, ref } from 'vue'
import JSXChild from './JSXChild.jsx'
 
export default defineComponent(() => { // 传入 setup 函数
  const countRef = ref(300)
 
  const render = () => {
    return <>
      <p>DEMO2--{countRef.value}</p>
      <JSXChild a={countRef.value + 100}></JSXChild>
    </>
  }
  return render 
})
 
// 子组件 JSXChild.jsx
 
import { defineComponent } from 'vue'
 
export default defineComponent({ // 传入组件配置
  props: ['a'],
  setup (props) {
    const render = () => {
      return <>
        <p>child {props.a}</p>
      </>
    }
    return render
  }
})

2. JSX 和 template 的区别

  • 语法上有很大区别
  • JSX 本质就是 js 代码,可以使用 js 的任何能力
  • template 只能嵌入简单的 js 表达式,其他需要指令,如 v-if
  • JSX 已经成为 ES 规范,template 还是 Vue 自家规范
  • 本质是相同的:
  • 都会被编译为 js 代码(render 函数)

2.1 插值

  • template 使用双括号 {{ }}
  • jsx 使用单括号 { }
// template
 
<template>
  <p>{{ name }} -- {{ age }}</p>
</template>
 
// jsx
 
const render = () => {
    return <>
        <p>child {props.a}</p>
    </>
}

2.2 自定义组件

  • template 组件名使用时可改变大小写或是驼峰,jsx 不可更改
  • 引入动态参数,template使用冒号+参数名(:msg='msg'),jsx 不需要冒号
// template
 
<template>
  <div class="home">
    <watch-effect :msg="msgRef"/>
  </div>
</template>
 
<script>
import { ref } from 'vue'
import WatchEffect from '@/components/WatchEffect.vue'
export default {
  name: 'HomeView',
  components: {
    WatchEffect,
  },
  setup () {
    const msgRef = ref('123')
    return {
        msgRef
    }
  }
}
</script>
 
// jsx 组件名称不可变,要和引入名字保持一致
 
import { defineComponent, ref } from 'vue'
import JSXChild from './JSXChild.jsx'
 
export default defineComponent(() => {
  const countRef = ref(300)
 
  const render = () => {
    return <>
      <p>DEMO2--{countRef.value}</p>
      <JSXChild a={countRef.value + 100}></JSXChild>
    </>
  }
  return render
})

2.3 属性和事件

template 区分属性和事件的写法,jsx 不区分
// jsx 属性和事件的写法一样
 
import { defineComponent, ref } from 'vue'
import JSXChild from './JSXChild.jsx'
 
export default defineComponent(() => {
  const countRef = ref(300)
 
  function onChange () {
    console.log('onChange')
  }
  const render = () => {
    return <>
      <p>DEMO2--{countRef.value}</p>
      <JSXChild a={countRef.value + 100} change={onChange}></JSXChild>
    </>
  }
  return render
})

2.4 条件和循环 

条件 template 使用 v-if 指令,jsx 在表达式中使用 && (类似 if( a && b))
// template v-if
 
<template>
  <p v-if="flagRef">template demo</p>
  <button @click="changeFlagRef">click</button>
</template>
<script>
import { ref } from 'vue'
export default {
  setup () {
    const flagRef = ref(true)
 
    function changeFlagRef () {
      flagRef.value = !flagRef.value
    }
 
    return {
      flagRef,
      changeFlagRef
    }
  }
}
</script>
 
// jsx &&符号判断
 
import { defineComponent, ref } from 'vue'
import JSXChild from './JSXChild.jsx'
 
export default defineComponent(() => {
  const flagRef = ref(true)
 
  function changeFlagRef () {
    flagRef.value = !flagRef.value
  }
 
  const render = () => {
    return <>
      <p onClick={changeFlagRef}>DEMO2--{flagRef.value.toString()}</p>
      {flagRef.value && <JSXChild a={flagRef.value}></JSXChild>}
    </>
  }
  return render
})
 循环 template 使用 v-for 指令,jsx 使用数组的 .map 函数
// template v-for
 
<template>
  <ul>
    <li v-for="item in state.list" :key="item">{{ item }}</li>
  </ul>
</template>
<script>
import { Reactive } from 'vue'
export default {
  setup () {
    const state = reactive({
      list: ['a', 'b', 'c']
    })
 
    return {
      state
    }
  }
}
</script>
 
// jsx 数组 .map 函数
 
import { defineComponent, reactive } from 'vue'
 
export default defineComponent(() => {
  const state = reactive({
    list: ['a1', 'b1', 'c1']
  })
 
  const render = () => {
    return <>
      <ul>
        {state.list.map(item => <li>{item}</li>)}
      </ul>
    </>
  }
  return render
})

3. JSX 和 slot (体会 JSX 的优越性)

  • slot 是 Vue 发明的概念,为了完善 template 的能力
  • slot 一直是 Vue 初学者的“噩梦”,特别是:作用域 slot
  • 但使用 JSX 将很容易理解,因为 JSX 本质就是 js

总结 

到此这篇关于Vue3使用JSX的文章就介绍到这了,更多相关Vue3使用JSX内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue3使用JSX的方法实例(笔记自用)

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

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

猜你喜欢
  • Vue3使用JSX的方法实例(笔记自用)
    目录1. Vue3 中 JSX 的基本应用1.1 在 .vue 文件中使用 jsx1.2 .jsx文件格式2. JSX 和 template 的区别2.1 插值2.2 自定义组件2....
    99+
    2023-02-23
    vue3使用jsx组件 vue3使用jsx vue jsx
  • 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的方法
    在 Vue 3 的项目开发中,template 是 Vue 3 默认的写法。虽然 template 长得很像 HTML,但 Vue 其实会把 template 解析为 render 函数,之后,组件运行的时候通过 render 函数去返回虚...
    99+
    2022-11-25
    JSX Vue vue3
  • 如何在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项目中 推进使...
    99+
    2023-07-05
  • vue3无法使用jsx的问题及解决
    目录vue3无法使用jsx问题报错一:无法使用 JSX,除非提供了 "--jsx" 标志报错二:ElementPlusIconsVue挂载问题关于vue3的jsx...
    99+
    2024-04-02
  • vue3使用element ui的方法实例
    目录前言1、首先安装element-plus2、修改main.js或main.ts文件3、然后在代码中使用4、有的会出现报错,那就再安装一下element ui总结前言 elemen...
    99+
    2022-11-13
    vue3 element ui 表单设计器 vue elementui表格 vue element ui教程
  • Vue3中Pinia的基本使用笔记
    目录什么是Pinia呢?Pinia和Vuex的区别与Vuex相比,Pinia很多的优势:如何使用Piniastore的核心部分:state,getter,action认识和定义Sta...
    99+
    2022-11-13
    vue3 pinia实战 vue3 pinia项目 vue 实战
  • Vue3中vuex的基本使用方法实例
    目录一、基本结构二、基本使用三、将store中的数据模块化后的使用1.模块化2.使用补充:如何改变vuex中的属性总结 一、基本结构 src/store/index.js中...
    99+
    2024-04-02
  • vue3 中使用 jsx 开发的详细过程
    目录安装 JSX 插件使用语法差异模板指令事件修饰符v-forv-on插槽安装 JSX 插件 在 Vue2 中要想使用 jsx 开发,需要安装 @vue/babel-preset-j...
    99+
    2024-04-02
  • vue3下watch的使用方法示例
    目录一,监听单个数据ref二,监听引用类型数据ref:深度监听1,引用类型ref直接深度监听2,引用类型ref深拷贝深度监听三,监听单个数据:reactive四,监听引用类型数据:r...
    99+
    2023-03-19
    vue3 watch使用 vue3 watch
  • Java中clone方法使用笔记
    目录注解注解的分类:内置注解元注解(修饰注解的注解)自定义注解对象克隆如何实现克隆总结注解 定义: 注解是一种注释机制,它可以注释包、类、方法、变量、参数,在编译器生成类文件时,标注...
    99+
    2023-02-10
    java中clone方法怎么用 Java clone方法 java中clone方法怎么用
  • React.JS中JSX的原理与使用方法
    这篇文章主要介绍“React.JS中JSX的原理与使用方法”,在日常操作中,相信很多人在React.JS中JSX的原理与使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • Vue下使用JSX的方法是什么
    这篇文章主要介绍了Vue下使用JSX的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue下使用JSX的方法是什么文章都会有所收获,下面我们一起来看看吧。Vue.js 具有简单的 API 和几个选项,...
    99+
    2023-07-04
  • matlab使用笔记本自带摄像头的方法是什么
    本篇内容介绍了“matlab使用笔记本自带摄像头的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!内置摄像头  这是一个...
    99+
    2023-06-19
  • Vue3使用icon的两种方式实例
    目录1. 使用svg2. 使用fontAwesome3  来源4 总结技术栈和版本 Vite2 + Vue3 + fontAwesome5 Vue3 中使用Icon的方式,...
    99+
    2024-04-02
  • Vue3中简单使用Mock.js方法实例分析
    mock.js简介 官方链接:Mock.js (mockjs.com) 前端开发人员用来模拟虚拟数据,拦截ajax请求,方便模拟后端接口 安装 npm install mockjs...
    99+
    2023-05-14
    Vue3 Mock.js
  • vue3 学习笔记之axios的使用变化总结
    目录一、axio 得基本使用 二、如何解决跨域问题? 三、封装 四、全局引用 axios 使用 axios 之前,需要先安装好。 yarn add axios npm ins...
    99+
    2024-04-02
  • Python2.7自学笔记1——使用py
    1、number    数字可以直接在python运算,使用圆括号分组In [1]: 2+2 Out[1]: 4 In [2]: 50-5*6 Out[2]: 20 In [3]: (50-5.0*6)/4 Out[3]: 5.0 In [...
    99+
    2023-01-31
    笔记 py
  • 如何在vue3中优雅的使用jsx/tsx详解
    目录前言安装插件(@vitejs/plugin-vue-jsx)1、插值2、class与style 绑定3、条件渲染4、列表渲染5、事件处理6、v-model7、slot插槽8、使用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作