0

0

怎么在vue3中使用jsx语法

WBOY

WBOY

发布时间:2023-05-12 12:46:12

|

2252人浏览过

|

来源于亿速云

转载

    背景

    vue3项目中 推进使用composition-api + setup 形式
    配合jsx+hooks形式,按业务分离,逻辑更清晰,维护更方便。

    语法

    下面主要通过对比jsx和template不同语法,来实现同样的功能

    一丶 普通内容

    普通内容常量,写法是一样的
    //jsx 写法
    setup() {
      return ()=>

    hello

    } //tempalte 写法

    hello

    二丶 动态变量

    jsx 统一使用大括号包裹变量,没有引号,比如

    {age}

    tempalte 内容使用双大括号包裹属性变量使用冒号开头
    {{age}}

    {} 是jsx的万能的用法,里面可以写js的表达式循环逻辑操作等等

    //jsx 写法
    setup() {
      let age = 1           
      return ()=>
    {age}
    //没有" "包裹,统一都是{} } //tempalte 写法
    {{age}}

    三丶 函数事件

    1.基本用法

    jsxtempalte的函数区别如下:

    立即学习前端免费学习笔记(深入)”;

    • jsx使用on+大驼峰形式(首字母大写),template使用 @+短横线 形式

    • jsx方法名需要使用 {} 包裹起来,tempalte使用 " " 包裹起来

    用例1:

    //jsx 写法
    setup() {
      const age= ref(0);
      let inc = ()=>{
          age.value++
       }
      return ()=> 
    {age.value}
    } //tempalte 写法
    {{age}}

    2.参数进阶

    jsxtempalte都一样:无自定义参数的函数不需要带()结尾
    jsx在使用带参数的函数,则需要使用箭头函数包裹{()=>fn(args)}
    jsx需要借助withModifiers,实现.self ,.stop等修饰符的效果

    用例2:

    //jsx 写法
    import { withModifiers} from "vue";
    ...
    setup() {
      const age= ref(0);
      let inc = ()=>{
          age.value++
       }
      return ()=> (
      <> //根 路径必须有节点,或者用<>代表fragment空节点
        
    {age.value}
    //无自定义参数,不需要()
    inc('test')}>{age.value}
    //有参数,需要()=>包裹 //withModifiers包裹vue修饰符
    {age.value}
    //也可以再inc函数中使用e.stopPropagation()等 { //键盘事件enter事件 //逻辑部分也可以写入js if (ev.key === 'Enter') { inc (); } }}> ) } //tempalte 写法
    {{age}}
    {{age}}
    {{age}}
    //stop修饰符 {{age}} //键盘事件enter事件

    四丶 ref绑定

    vue3中 有两种ref,一种是指的ref()定义的双向绑定变量,另外则是 绑定在Dom标签的ref引用

    对于ref()双向绑定变量,jsx不会向template自动处理.value问题,需要手动加value
    对于Dom标签的ref引用,jsx是直接用ref(null)变量,不需要加.valuetempalte则是用同名字符串

    用例:

    PixVerse
    PixVerse

    PixVerse是一款强大的AI视频生成工具,可以轻松地将多种输入转化为令人惊叹的视频。

    下载
    //jsx 写法
    setup() {
      const divRef=ref(null);
      const age= ref(0);  
      return ()=>
       (
         
    //Dom标签的ref引用 {age.value} //ref()双向绑定变量
    ) } //tempalte 写法
    //Dom标签的ref,使用同名字符串 {{age}} //ref()双向绑定变量,不需要.value

    五丶 v-model语法

    jsx中使用v-model或v-models代替templatev-model

    组件只有一个v-model时,使用v-model语法
    组件只有多个v-model时,可以使用v-model:xx语法

    多个v-model时 也可以v-models语法,需传递一个二维数组(新版已经不推荐)

    用例:

    //jsx 写法
    setup() {
      const age= ref(0);  
      const gender =ref('')
      return ()=>
       (
            
           //v-model带修饰,推荐(v-model:修饰符)
           //v-model带修饰 (新版不推荐)
    
         //多个v-model
           
         
       ) 
    }
    
    //tempalte 写法
      
         
           //v-model带修饰
         
      

    六丶 v-slots语法

    jsx中使用 v-slots 代替 v-slot (简写#)

    用例:

    //jsx 写法
    //方法一
    const App = {
      setup() {
        const slots = {
          default: () => 
    A
    , //默认插槽 bar: () => B, //具名插槽 }; return () => ; }, }; //方法二 const App = { setup() { return () => ( <> {{ default: () =>
    A
    , //此方法 默认default不能少 bar: () => B, //具名插槽 }}
    {() => "foo"} ); }, }; //tempalte 写法 //具名插槽,也叫 #bar

    七丶 v-for语法

    jsx中可使用js中的map循环来实现tempalte的v-for逻辑

    用例:

    //jsx 写法
    setup() {
      const arr= ref([{label:'1'},{label:'2'},{label:'3'}]);      
      return ()=>(   
         <>
         { arr.value.map(item=> {item.label} ) }
         
        ) 
    }
    
    //tempalte 写法
      
         {{item.label}} 
      

    八丶 v-if语法

    jsx中可使用js中的if逻辑三目运算&&,|| 等来实现tempalte的v-if逻辑

    用例:

    //jsx 写法
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
         {show && test vif}      //使用&&运算    
         {!show && test velse}
         
        ) 
    }
    
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
          {show.value ? 'test vif' : 'test velse'}    //三目运算   
         
        ) 
    }
    
    setup() {
      const show= ref(false); 
      const vif=()=>{
         if(show) {
            return  test vif 
         }
         return  test velse 
      }   
      return ()=>(   
         <>
            vif()   //if条件函数
         
        ) 
    }
    
    //tempalte 写法
      
         test vif 
         test velse 
      

    九丶 v-show语法

    用例:

    //jsx 写法
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
           test vshow    //v-show
         
        ) 
    }
    
    //tempalte 写法
      
         test vshow  
      

    十丶 指令的修饰符用法

    指令使用下划线 ,比如v-loading
    用例:

    //jsx 写法
    setup() {
      const isLoading= ref(true);      
      return ()=>(   
         <>
           loading     
         
        ) 
    }
    
    //tempalte 写法
      
         loading  
      

    相关专题

    更多
    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    4

    2026.01.16

    全民K歌得高分教程大全
    全民K歌得高分教程大全

    本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.16

    C++ 单元测试与代码质量保障
    C++ 单元测试与代码质量保障

    本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

    10

    2026.01.16

    java数据库连接教程大全
    java数据库连接教程大全

    本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

    33

    2026.01.15

    Java音频处理教程汇总
    Java音频处理教程汇总

    本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

    15

    2026.01.15

    windows查看wifi密码教程大全
    windows查看wifi密码教程大全

    本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

    42

    2026.01.15

    浏览器缓存清理方法汇总
    浏览器缓存清理方法汇总

    本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

    7

    2026.01.15

    ps图片相关教程汇总
    ps图片相关教程汇总

    本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.15

    ppt一键生成相关合集
    ppt一键生成相关合集

    本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

    6

    2026.01.15

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Vue3.x 工具篇--十天技能课堂
    Vue3.x 工具篇--十天技能课堂

    共26课时 | 1.4万人学习

    Vue3.x 核心篇--十天技能课堂
    Vue3.x 核心篇--十天技能课堂

    共30课时 | 1.5万人学习

    Vue3.x新特性篇--十天基础课堂
    Vue3.x新特性篇--十天基础课堂

    共20课时 | 1.2万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号