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

詳解vue3中組件的非兼容變更

 更新時(shí)間:2021年03月03日 15:31:55   作者:月島蘑菇  
這篇文章主要介紹了詳解vue3中組件的非兼容變更,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下

函數(shù)式組件

functional attribute 在單文件組件 (SFC) <template> 已被移除
{ functional: true } 選項(xiàng)在通過函數(shù)創(chuàng)建組件已被移除

// 使用 <dynamic-heading> 組件,負(fù)責(zé)提供適當(dāng)?shù)臉?biāo)題 (即:h1,h2,h3,等等),在 2.x 中,這可能是作為單個(gè)文件組件編寫的:
// Vue 2 函數(shù)式組件示例
export default {
 functional: true,
 props: ['level'],
 render(h, { props, data, children }) {
 return h(`h${props.level}`, data, children)
 }
}

// Vue 2 函數(shù)式組件示例使用 <template>
<template functional>
 <component
 :is="`h${props.level}`"
 v-bind="attrs"
 v-on="listeners"
 />
</template>

<script>
export default {
 props: ['level']
}
</script>

現(xiàn)在在 Vue 3 中,所有的函數(shù)式組件都是用普通函數(shù)創(chuàng)建的,換句話說,不需要定義 { functional: true } 組件選項(xiàng)。
他們將接收兩個(gè)參數(shù):props 和 context。context 參數(shù)是一個(gè)對(duì)象,包含組件的 attrs,slots,和 emit property。
此外,現(xiàn)在不是在 render 函數(shù)中隱式提供 h,而是全局導(dǎo)入 h。
使用前面提到的 <dynamic-heading> 組件的示例,下面是它現(xiàn)在的樣子。

// vue3.0
import { h } from 'vue'
const DynamicHeading = (props, context) => {
 return h(`h${props.level}`, context.attrs, context.slots)
}
DynamicHeading.props = ['level']
export default DynamicHeading
// vue3.0單文件寫法
<template>
 <component
 v-bind:is="`h${$props.level}`"
 v-bind="$attrs"
 />
</template>

<script>
export default {
 props: ['level']
}
</script>

主要區(qū)別在于

functional attribute 在 <template> 中移除
listeners 現(xiàn)在作為 $attrs 的一部分傳遞,可以將其刪除

異步組件的寫法與defineAsyncComponent方法

現(xiàn)在使用defineAsyncComponent助手方法,用于顯示的定義異步組件
component選項(xiàng)重命名為loader
Loader函數(shù)本身不再接受resolve和rejuct參數(shù),必須返回一個(gè)Promise

// vue2.x
// 以前異步組件是通過將組件定義為返回Promise的函數(shù)來創(chuàng)建
const asyncPage = () => import('./NextPage.vue')
// 或者以選項(xiàng)方式創(chuàng)建
const asyncPage = {
 component: () => import('./NextPage.vue'),
 delay: 200,
 timeout: 3000,
 error: ErrorComponent,
 loading: LoadingComponent
}

// vue3.x
在vue3.x中,需要使用defineAsyncComponent來定義
import{ defineAsyncComponent } from 'vue'
import ErrorComponent from './components/ErrorComponent.vue'
import LoadingComponent from './components/LoadingComponent.vue'

// 不帶選項(xiàng)的定義方法
const asyncPage = defineAsyncComponent(() => import('./NextPage.vue'))

// 帶選項(xiàng)的異步組件
constasyncPageWithOptions = defineAsyncCopmonent({
 loader: () => import('./NextPage.vue'),
 delay: 200,
 timeout: 3000,
 errorComponent: ErrorComponent,
 LoadingComponent: LoadingComponent
})

loader函數(shù)不再接收resolve和reject參數(shù),且必須始終返回Promise

// vue2.x
const oldAsyncComponent = (resolve, reject) => {}
// vue3.x
const asyncComponent = defineAsyncComponent(() => new Promise((resolve, reject) => {}))

組件事件需要在emits選項(xiàng)中聲明

vue3中現(xiàn)在提供了一個(gè)emits選項(xiàng),類似props選項(xiàng)
此選項(xiàng)可以用于定義組件向其父對(duì)象發(fā)出的事件

<!-- vue2.x -->
<template>
 <div>
 <p>{{ text }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</template>
<script>
 export default {
 props: ['text']
 }
</script>

<!-- vue3.x -->
<!-- 現(xiàn)在和prop類似,可以用emits來定義組件發(fā)出的事件 -->
<!-- 這個(gè)選項(xiàng)還接收已給對(duì)象,用來向props一樣對(duì)傳遞的參數(shù)進(jìn)行驗(yàn)證 -->
<!-- 強(qiáng)烈建議記錄下每個(gè)組件發(fā)出的所有emits,因?yàn)槿サ袅?native修飾符,未使用聲明的事件的所有監(jiān)聽器都將包含在組建的$attr中,默認(rèn)情況下,該監(jiān)聽器將綁定到組件的根節(jié)點(diǎn) -->
<template>
 <div>
 <p>{{ text }}</p>
 <button v-on:click="$emit('accepted')">OK</button>
 </div>
</template>
<script>
 export default {
 props: ['text'],
 emits: ['accepted']
 }
</script>

以上就是詳解vue3中組件的非兼容變更的詳細(xì)內(nèi)容,更多關(guān)于vue3中組件的非兼容變更的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue 列表渲染 key的原理和作用詳解

    Vue 列表渲染 key的原理和作用詳解

    這篇文章主要介紹了key在Vue列表渲染時(shí)的原理和作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • 詳解Vue如何監(jiān)測(cè)數(shù)組的變化

    詳解Vue如何監(jiān)測(cè)數(shù)組的變化

    在 Vue 中,如果直接對(duì)數(shù)組進(jìn)行操作,比如使用下標(biāo)直接修改元素,數(shù)組長度不變時(shí), Vue 是無法監(jiān)測(cè)到這種變化的,導(dǎo)致無法觸發(fā)視圖更新。針對(duì)該問題本文為大家整理了一些方法,需要的可以參考一下
    2023-01-01
  • vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能(完整代碼)

    vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能(完整代碼)

    驗(yàn)證碼功能在我們的身邊用處極廣,今天小編給大家分享基于vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • 用vue構(gòu)建多頁面應(yīng)用的示例代碼

    用vue構(gòu)建多頁面應(yīng)用的示例代碼

    這篇文章主要介紹了用vue構(gòu)建多頁面應(yīng)用的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • vant中的toast輕提示實(shí)現(xiàn)代碼

    vant中的toast輕提示實(shí)現(xiàn)代碼

    這篇文章主要介紹了vant中的toast輕提示實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue組件化常用方法之組件傳值與通信

    Vue組件化常用方法之組件傳值與通信

    這篇文章主要給大家介紹了關(guān)于Vue組件化常用方法之組件傳值與通信的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • vant 中van-list的用法說明

    vant 中van-list的用法說明

    這篇文章主要介紹了vant 中van-list的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue官網(wǎng)todoMVC示例代碼

    Vue官網(wǎng)todoMVC示例代碼

    本篇文章主要介紹了Vue官網(wǎng)todoMVC示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue傳值方式的十二種方法總結(jié)

    vue傳值方式的十二種方法總結(jié)

    這篇文章主要介紹了vue傳值方式的十二種方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Vue2.x通用編輯組件的封裝及應(yīng)用詳解

    Vue2.x通用編輯組件的封裝及應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2.x通用編輯組件的封裝及應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評(píng)論