最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在vue3中使用jsx語法

 更新時間:2023年03月06日 09:27:03   作者:Spig跟著fly學前端  
這篇文章主要介紹了在vue3中使用jsx語法,下面主要通過對比jsx和template不同語法,來實現(xiàn)同樣的功能,需要的朋友可以參考下

背景

vue3項目中 推進使用composition-api + setup 形式
配合jsx+hooks形式,按業(yè)務分離,邏輯更清晰,維護更方便;

語法

下面主要通過對比jsx和template不同語法,來實現(xiàn)同樣的功能

一丶 普通內(nèi)容

普通內(nèi)容常量,寫法是一樣的

//jsx 寫法
setup() {
  return ()=><p type="email">hello</p>
}

//tempalte 寫法
  <tempalte>
     <p type="email">hello</p>
  </template>

二丶 動態(tài)變量

jsx 統(tǒng)一使用大括號包裹變量,沒有引號,比如 <div age={age}>{age}</div>
tempalte 內(nèi)容使用雙大括號包裹,屬性變量使用冒號開頭<div :age="age">{{age}}</div>

{} 是jsx的萬能的用法,里面可以寫js的表達式,循環(huán)邏輯操作等等

//jsx 寫法
setup() {
  let age = 1           
  return ()=><div age={age}>{age}</div> //沒有" "包裹,統(tǒng)一都是{}
}

//tempalte 寫法
  <tempalte>
     <div :age="age">{{age}}</div>
  </template>

三丶 函數(shù)事件

1.基本用法

jsxtempalte的函數(shù)區(qū)別如下:

  • jsx使用on+大駝峰形式(首字母大寫),template使用 @+短橫線 形式
  • jsx方法名需要使用 {} 包裹起來,tempalte使用 " " 包裹起來

用例1:

//jsx 寫法
setup() {
  const age= ref(0);
  let inc = ()=>{
      age.value++
   }
  return ()=> <div onClick={inc}>{age.value}</div>
}

//tempalte 寫法
  <tempalte>
     <div @click="inc">{{age}}</div>
   </template>

2.參數(shù)進階

jsxtempalte都一樣:無自定義參數(shù)的函數(shù)不需要帶()結尾
jsx在使用帶參數(shù)的函數(shù),則需要使用箭頭函數(shù)包裹{()=>fn(args)}
jsx需要借助withModifiers,實現(xiàn).self ,.stop等修飾符的效果

用例2:

//jsx 寫法
import { withModifiers} from "vue";
...
setup() {
  const age= ref(0);
  let inc = ()=>{
      age.value++
   }
  return ()=> (
  <> //根 路徑必須有節(jié)點,或者用<>代表fragment空節(jié)點
    <div onClick={inc}>{age.value}</div>  //無自定義參數(shù),不需要()
    <div onClick={()=>inc('test')}>{age.value}</div>  //有參數(shù),需要()=>包裹
    //withModifiers包裹vue修飾符
    <div onClick={withModifiers(inc, ["stop"])}>{age.value}</div> //也可以再inc函數(shù)中使用e.stopPropagation()等
    <input onKeyup=={(ev) => {     //鍵盤事件enter事件 
        //邏輯部分也可以寫入js
        if (ev.key === 'Enter') {
           inc ();
        }
     }}></input > 
  </>
 )
}

//tempalte 寫法
  <tempalte>
     <div @click="inc"}>{{age}}</div>
     <div @click="inc('test')"}>{{age}}</div>
     <div @click.stop="inc"}>{{age}}</div>  //stop修飾符
     <input @keyup.enter="inc"}>{{age}}</input>  //鍵盤事件enter事件
  </template>

四丶 ref綁定

vue3中 有兩種ref,一種是指的ref()定義的雙向綁定變量,另外則是 綁定在Dom標簽的ref引用

對于ref()雙向綁定變量,jsx不會向template自動處理.value問題,需要手動加value
對于Dom標簽的ref引用,jsx是直接用ref(null)變量,不需要加.value,tempalte則是用同名字符串

用例:

//jsx 寫法
setup() {
  const divRef=ref(null);
  const age= ref(0);  
  return ()=>
   (
     <div ref={divRef} > //Dom標簽的ref引用
        <span>{age.value}</span>   //ref()雙向綁定變量
     </div>
   ) 
}

//tempalte 寫法
  <tempalte>
     <div ref='divRef'>  //Dom標簽的ref,使用同名字符串
        <span>{{age}}</span>   //ref()雙向綁定變量,不需要.value
     </div>
  </template>

五丶 v-model語法

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

組件只有一個v-model時,使用v-model語法
組件只有多個v-model時,可以使用v-model:xx語法

多個v-model時 也可以v-models語法,需傳遞一個二維數(shù)組(新版已經(jīng)不推薦)

用例:

//jsx 寫法
setup() {
  const age= ref(0);  
  const gender =ref('')
  return ()=>
   (
     <tz-input v-model={age} />   
     <tz-input v-model:foo={age} />  //v-model帶修飾,推薦(v-model:修飾符)
     <tz-input v-model={[age, "foo"]} />  //v-model帶修飾 (新版不推薦)

     //多個v-model
     <tz-input    //推薦(v-model:修飾符)
       v-model:foo={age}
       v-model:bar={gender}
     />  
     <tz-input   
       v-models={[          //使用v-models,傳遞二維數(shù)組 (新版不推薦)          
         [age, "foo"], 
         [gender, "bar"],
         ]}
     />
   ) 
}

//tempalte 寫法
  <tempalte>
     <tz-input v-model="age" />
     <tz-input v-model.foo="age" />  //v-model帶修飾
     <tz-input 
       v-model.foo="age"     //多個v-model
       v-model.bar="gender"
     />
  </template>

六丶 v-slots語法

jsx中使用 v-slots 代替 v-slot (簡寫#)

用例:

//jsx 寫法
//方法一
const App = {
  setup() {
    const slots = {
      default: () => <div>A</div>,     //默認插槽
      bar: () => <span>B</span>,       //具名插槽
    };
    return () => <A v-slots={slots} />;
  },
};
//方法二
const App = {
  setup() {
    return () => (
      <>
        <A>
          {{
            default: () => <div>A</div>,   //此方法 默認default不能少
            bar: () => <span>B</span>,   //具名插槽
          }}
        </A>
        <B>{() => "foo"}</B>
      </>
    );
  },
};

//tempalte 寫法
 <tempalte>
   <tempalte v-slot:bar>  //具名插槽,也叫 #bar
     <A />
   </template>
   <tempalte v-slot:default>
     <A />
   </template>
 </template>

七丶 v-for語法

jsx中可使用js中的map循環(huán)來實現(xiàn)tempalte的v-for邏輯

用例:

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

//tempalte 寫法
  <tempalte>
     <span v-for="item in arr" :key="item.label">{{item.label}}</span> 
  </template>

八丶 v-if語法

jsx中可使用js中的if邏輯,三目運算,&&,|| 等來實現(xiàn)tempalte的v-if邏輯

用例:

//jsx 寫法
setup() {
  const show= ref(false);      
  return ()=>(   
     <>
     {show && <span>test vif</span>}      //使用&&運算    
     {!show && <span>test velse</span>}
     </>
    ) 
}

setup() {
  const show= ref(false);      
  return ()=>(   
     <>
      <span>{show.value ? 'test vif' : 'test velse'}</span>    //三目運算   
     </>
    ) 
}

setup() {
  const show= ref(false); 
  const vif=()=>{
     if(show) {
        return  <span>test vif</span> 
     }
     return  <span>test velse</span> 
  }   
  return ()=>(   
     <>
        vif()   //if條件函數(shù)
     </>
    ) 
}

//tempalte 寫法
  <tempalte>
     <span v-if="show">test vif</span> 
     <span v-else>test velse</span> 
  </template>

九丶 v-show語法

用例:

//jsx 寫法
setup() {
  const show= ref(false);      
  return ()=>(   
     <>
      <span v-show={show.value}> test vshow</span>    //v-show
     </>
    ) 
}

//tempalte 寫法
  <tempalte>
    <span v-show="show"> test vshow </span> 
  </template>

十丶 指令的修飾符用法

指令使用下劃線 ,比如v-loading
用例:

//jsx 寫法
setup() {
  const isLoading= ref(true);      
  return ()=>(   
     <>
      <span v-loading_fullscreen_lock={isLoading}> loading </span>    
     </>
    ) 
}

//tempalte 寫法
  <tempalte>
    <span v-loading.fullscreen.lock="isLoading"> loading </span> 
  </template>

到此這篇關于在vue3中使用jsx語法的文章就介紹到這了,更多相關vue3使用jsx語法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • vue實現(xiàn)監(jiān)控視頻直播的示例代碼

    vue實現(xiàn)監(jiān)控視頻直播的示例代碼

    本文主要介紹了vue實現(xiàn)監(jiān)控視頻直播的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • vue+eslint+vscode配置教程

    vue+eslint+vscode配置教程

    這篇文章主要介紹了vue+eslint+vscode配置教程,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • vue項目動態(tài)路由刷新界面白屏undefined問題及解決

    vue項目動態(tài)路由刷新界面白屏undefined問題及解決

    這篇文章主要介紹了vue項目動態(tài)路由刷新界面白屏undefined問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • vue前端信息詳情頁模板梳理詳解

    vue前端信息詳情頁模板梳理詳解

    這篇文章主要為大家詳細介紹了vue前端信息詳情頁模板梳理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue實現(xiàn)base64編碼圖片間的切換功能

    Vue實現(xiàn)base64編碼圖片間的切換功能

    這篇文章主要介紹了Vue實現(xiàn)base64編碼圖片間的切換功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • vue axios sessionID每次請求都不同的原因以及修改方式

    vue axios sessionID每次請求都不同的原因以及修改方式

    這篇文章主要介紹了vue axios sessionID每次請求都不同的原因以及修改方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Vue3集成json-editor-vue3的代碼實現(xiàn)

    Vue3集成json-editor-vue3的代碼實現(xiàn)

    這篇文章主要介紹了Vue3集成json-editor-vue3的代碼實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • 解決removeEventListener 無法清除監(jiān)聽的問題

    解決removeEventListener 無法清除監(jiān)聽的問題

    這篇文章主要介紹了解決removeEventListener 無法清除監(jiān)聽的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue3項目中各個文件的作用詳細介紹

    vue3項目中各個文件的作用詳細介紹

    在Vue3項目中,通常會有以下一些常見的目錄和文件,下面這篇文章主要給大家介紹了關于vue3項目中各個文件的作用,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • 使用vue-print-nb打印el-table問題總結

    使用vue-print-nb打印el-table問題總結

    這篇文章主要介紹了使用vue-print-nb打印el-table問題總結,通過實例代碼介紹了vue-print-nb 打印功能,本文結合實例代碼講解的非常詳細,感興趣的朋友一起看看吧
    2024-01-01

最新評論

东至县| 巧家县| 项城市| 巨鹿县| 新安县| 德庆县| 延庆县| 石柱| 钦州市| 安西县| 长子县| 文化| 海林市| 云浮市| 含山县| 扎兰屯市| 建宁县| 通城县| 闵行区| 通道| 图木舒克市| 象山县| 宁河县| 黄大仙区| 周口市| 安泽县| 湘阴县| 紫云| 金阳县| 娄底市| 游戏| 石首市| 堆龙德庆县| 青龙| 漳浦县| 聂荣县| 灌南县| 夏邑县| 渭南市| 永修县| 新疆|