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

如何在vue3中使用jsx語法

 更新時間: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

組件只有一個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>,     //默認(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í)現(xiàn)監(jiān)控視頻直播的示例代碼

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

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

    vue+eslint+vscode配置教程

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

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

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

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

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

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

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

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

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

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

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

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

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

    vue3項(xiàng)目中各個文件的作用詳細(xì)介紹

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

    使用vue-print-nb打印el-table問題總結(jié)

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

最新評論

阜城县| 垫江县| 磐石市| 石棉县| 铜川市| 巴林左旗| 高台县| 尉氏县| 西盟| 贵溪市| 隆尧县| 株洲县| 高阳县| 阆中市| 安图县| 丁青县| 饶河县| 牟定县| 宿州市| 宜良县| 扶余县| 融水| 呼和浩特市| 新津县| 锡林郭勒盟| 永靖县| 清苑县| 宜都市| 奉贤区| 马山县| 托克托县| 田阳县| 开化县| 新野县| 江源县| 上杭县| 祁阳县| 承德市| 山东| 姜堰市| 桦南县|