搜索

查看: 3199|回复: 11

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

[复制链接]
发表于 2023-5-4 11:49:20 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:49:20 3199 11 看全部
目录
  • 1. Vue3 中 JSX 的基本应用
  • 1.1 在 .vue 文件中使用 jsx
  • 1.2 .jsx文件格式
  • 2. JSX 和 template 的区别
  • 2.1 插值
  • 2.2 自定义组件
  • 2.3 属性和事件
  • 2.4 条件和循环
  • 3. JSX 和 slot (体会 JSX 的优越性)
  • 总结
    1. Vue3 中 JSX 的基本应用
  • 使用 .jsx 格式文件和 defineComponent
  • defineComponent 可传入 setup 函数 或 组件的配置
  • 插值使用单括号 {}
    1.1 在 .vue 文件中使用 jsx
    // 父

      
       
      


    // JSXDemo1.vue


    1.2 .jsx文件格式
    // 父组件

    import { defineComponent, ref } from 'vue'
    import JSXChild from './JSXChild.jsx'

    export default defineComponent(() => { // 传入 setup 函数
      const countRef = ref(300)

      const render = () => {
        return
          DEMO2--{countRef.value}
          
       
      }
      return render
    })

    // 子组件 JSXChild.jsx

    import { defineComponent } from 'vue'

    export default defineComponent({ // 传入组件配置
      props: ['a'],
      setup (props) {
        const render = () => {
          return
            child {props.a}
          
        }
        return render
      }
    })
    2. JSX 和 template 的区别
  • 语法上有很大区别
  • JSX 本质就是 js 代码,可以使用 js 的任何能力
  • template 只能嵌入简单的 js 表达式,其他需要指令,如 v-if
  • JSX 已经成为 ES 规范,template 还是 Vue 自家规范
  • 本质是相同的:
  • 都会被编译为 js 代码(render 函数)
    2.1 插值
  • template 使用双括号 {{ }}
  • jsx 使用单括号 { }
    // template

      {{ name }} -- {{ age }}


    // jsx

    const render = () => {
        return
            child {props.a}
       
    }
    2.2 自定义组件
  • template 组件名使用时可改变大小写或是驼峰,jsx 不可更改
  • 引入动态参数,template使用冒号+参数名(:msg='msg'),jsx 不需要冒号
    // template

      
       
      


    // jsx 组件名称不可变,要和引入名字保持一致

    import { defineComponent, ref } from 'vue'
    import JSXChild from './JSXChild.jsx'

    export default defineComponent(() => {
      const countRef = ref(300)

      const render = () => {
        return
          DEMO2--{countRef.value}
          
       
      }
      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
          DEMO2--{countRef.value}
          
       
      }
      return render
    })
    2.4 条件和循环
    条件 template 使用 v-if 指令,jsx 在表达式中使用 && (类似 if( a && b))
    // template v-if

      template demo
      click


    // 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
          DEMO2--{flagRef.value.toString()}
          {flagRef.value && }
       
      }
      return render
    })
    循环 template 使用 v-for 指令,jsx 使用数组的 .map 函数
    // template v-for

      
        {{ item }}
      



    // jsx 数组 .map 函数

    import { defineComponent, reactive } from 'vue'

    export default defineComponent(() => {
      const state = reactive({
        list: ['a1', 'b1', 'c1']
      })

      const render = () => {
        return
          
            {state.list.map(item =>
  • {item})}
          

       
      }
      return render
    })
    3. JSX 和 slot (体会 JSX 的优越性)
  • slot 是 Vue 发明的概念,为了完善 template 的能力
  • slot 一直是 Vue 初学者的“噩梦”,特别是:作用域 slot
  • 但使用 JSX 将很容易理解,因为 JSX 本质就是 js
    总结
    到此这篇关于Vue3使用JSX的文章就介绍到这了,更多相关Vue3使用JSX内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-29 14:23:14 | 显示全部楼层
    小妖花满楼满fx 2023-6-29 14:23:14 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-29 17:38:35 | 显示全部楼层
    掌舵的鱼1987 2023-6-29 17:38:35 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    发表于 2023-6-29 19:11:33 | 显示全部楼层
    462710480 2023-6-29 19:11:33 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-6-29 22:49:00 | 显示全部楼层
    当当当当裤裆坦 2023-6-29 22:49:00 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    发表于 2023-6-30 09:52:39 | 显示全部楼层
    啤酒瓶空了缓 2023-6-30 09:52:39 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-30 15:33:49 | 显示全部楼层
    123456823 2023-6-30 15:33:49 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-7-3 06:47:07 | 显示全部楼层
    哈哈SE7 2023-7-3 06:47:07 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    发表于 2023-7-3 09:06:35 | 显示全部楼层
    我的苦恼冉 2023-7-3 09:06:35 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-7-3 13:44:21 | 显示全部楼层
    ffycxyw2274436 2023-7-3 13:44:21 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表