欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在vue3中使用jsx語法

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

背景

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

語法

下面主要通過對比jsx和template不同語法,來實(shí)現(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的表達(dá)式循環(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ù)進(jìn)階

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

用例2:

//jsx 寫法
import { withModifiers} from "vue";
...
setup() {
  const age= ref(0);
  let inc = ()=>{
      age.value++
   }
  return ()=> (
  <> //根 路徑必須有節(jié)點(diǎn),或者用<>代表fragment空節(jié)點(diǎn)
    <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標(biāo)簽的ref引用

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

用例:

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

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

五丶 v-model語法

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

組件只有一個(gè)v-model時(shí),使用v-model語法
組件只有多個(gè)v-model時(shí),可以使用v-model:xx語法

多個(gè)v-model時(shí) 也可以v-models語法,需傳遞一個(gè)二維數(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帶修飾 (新版不推薦)

     //多個(gè)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"     //多個(gè)v-model
       v-model.bar="gender"
     />
  </template>

六丶 v-slots語法

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

用例:

//jsx 寫法
//方法一
const App = {
  setup() {
    const slots = {
      default: () => <div>A</div>,     //默認(rèn)插槽
      bar: () => <span>B</span>,       //具名插槽
    };
    return () => <A v-slots={slots} />;
  },
};
//方法二
const App = {
  setup() {
    return () => (
      <>
        <A>
          {{
            default: () => <div>A</div>,   //此方法 默認(rèn)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)來實(shí)現(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邏輯,三目運(yùn)算&&,|| 等來實(shí)現(xiàn)tempalte的v-if邏輯

用例:

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

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

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>

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

相關(guān)文章

  • Vue按時(shí)間段查詢數(shù)據(jù)組件使用詳解

    Vue按時(shí)間段查詢數(shù)據(jù)組件使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue按時(shí)間段查詢數(shù)據(jù)組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用(適合新手)

    Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用(適合新手)

    在Vue項(xiàng)目中導(dǎo)出Excel表格是常見的功能,特別是在后臺管理系統(tǒng)中,為了方便用戶將大量數(shù)據(jù)保存為本地文件,這篇文章主要給大家介紹了關(guān)于Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • Vue中el-table條件渲染防止樣式亂掉(解決方法)

    Vue中el-table條件渲染防止樣式亂掉(解決方法)

    這篇文章主要介紹了Vue中el-table條件渲染防止樣式亂掉問題,通過使用:key="Math.random()" 可解決樣式錯(cuò)亂問題,此key屬性是vue自帶的特殊屬性,主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時(shí)辨識 VNodes,依次來提升頁面渲染性能,感興趣的朋友一起看看吧
    2023-11-11
  • 最新Vue過濾器介紹及使用方法

    最新Vue過濾器介紹及使用方法

    過濾器是vue為開發(fā)者提供的功能,常用于文本的格式化,過濾器應(yīng)該被添加在JavaScrip表達(dá)式的尾部,由“管道符”進(jìn)行調(diào)用,這篇文章通過案例給大家講解Vue過濾器介紹及使用方法,需要的朋友參考下吧
    2022-11-11
  • Vue中的@blur/@focus事件解讀

    Vue中的@blur/@focus事件解讀

    這篇文章主要介紹了Vue中的@blur/@focus事件解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue如何轉(zhuǎn)換時(shí)間格式為年月日時(shí)分秒和年月日(補(bǔ)零)

    vue如何轉(zhuǎn)換時(shí)間格式為年月日時(shí)分秒和年月日(補(bǔ)零)

    這篇文章主要介紹了vue如何轉(zhuǎn)換時(shí)間格式為年月日時(shí)分秒和年月日(補(bǔ)零),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用keep-alive時(shí),數(shù)據(jù)無法刷新的問題及解決

    使用keep-alive時(shí),數(shù)據(jù)無法刷新的問題及解決

    這篇文章主要介紹了使用keep-alive時(shí),數(shù)據(jù)無法刷新的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue2?響應(yīng)式系統(tǒng)之?dāng)?shù)組

    Vue2?響應(yīng)式系統(tǒng)之?dāng)?shù)組

    這篇文章主要介紹了Vue2?響應(yīng)式系統(tǒng)之?dāng)?shù)組,本文接著上幾篇文章Vue2響應(yīng)式系統(tǒng)?、Vue2?響應(yīng)式系統(tǒng)之分支切換,響應(yīng)式系統(tǒng)之嵌套、響應(yīng)式系統(tǒng)之深度響應(yīng)?展開相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-04-04
  • vue中如何動態(tài)獲取剩余區(qū)域的滾動高度

    vue中如何動態(tài)獲取剩余區(qū)域的滾動高度

    這篇文章主要介紹了vue中如何動態(tài)獲取剩余區(qū)域的滾動高度問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論