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

Vue3通用API功能示例剖析

 更新時(shí)間:2023年05月05日 09:10:10   作者:渣渣錢端攻城獅  
這篇文章主要為大家介紹了Vue3通用API功能示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

通用API

version (暴漏當(dāng)前使用的Vue版本)

import Vue from 'vue';
export default {
    setup(props, context) {
        console.log(Vue.version);
        return {};
    }
};

nextTick (Dom更新完成后觸發(fā),用于獲取更新后的Dom)

當(dāng)我們更改響應(yīng)式state時(shí),Vue更新DOM并不是同步實(shí)時(shí)更新的,而是將同步執(zhí)行的所有state更新緩存起來,同步代碼執(zhí)行完后再去執(zhí)行Dom更新操作,很大程度的優(yōu)化了render性能,減少了Dom更新次數(shù);

而這一特性帶來的一個(gè)問題,我們無法在state更改后獲取到真實(shí)的Dom,所以Vue提供了nextTick來獲取state更新后的Dom

function nextTick(callback?: () => void): Promise<void>

使用案例

<template>
    <div class="test_demo">
        <h2 class="text">{{ text }}</h2>
        <button @click="onBtnClick">更新</button>
    </div>
</template>
<script lang="ts" setup>
import { ref, nextTick } from 'vue';
const text = ref('test_0');
const onBtnClick = () => {
    text.value = 'test_1';
    nextTick(() => {
        const text = (
            document.querySelector<HTMLElement>('.text') as HTMLElement
        ).innerText;
        console.log(text);
    });
    text.value = 'test_2';
};
</script>

點(diǎn)擊更新按鈕后,輸出test_2。但是,如果注釋掉text.value = 'test_1';,輸出結(jié)果大不一樣,輸出test_0。

為什么會有這個(gè)問題?

text.value賦值操作是同步實(shí)時(shí)的,代碼執(zhí)行遇到響應(yīng)式state的更改時(shí),會提交一個(gè)視圖更新邏輯到微任務(wù)隊(duì)列,遇到nextTick,也會向微任務(wù)隊(duì)列提交。 所以上述代碼,視圖更新邏輯nextTick前邊,視圖更新邏輯的執(zhí)行是將text.value = 'test_1'text.value = 'test_2'合并后再更新視圖,所以輸出test2;

注釋掉text.value = 'test_1'后,nextTick在微任務(wù)隊(duì)列的順序就在視圖更新邏輯前邊了,所以輸出test_0。

defineComponent(類型推導(dǎo)的輔助函數(shù), 讓 TypeScript 正確地推導(dǎo)出組件選項(xiàng)內(nèi)的類型)

如果你使用<script setup lang='ts'>語法,就需要使用definePropsTS推導(dǎo)出組件的Props

<script setup lang="ts">
// 啟用了 TypeScript
import { ref } from 'vue'
const props = defineProps({ msg: String })
const count = ref(1)
</script>
<template>
  <!-- 啟用了類型檢查和自動(dòng)補(bǔ)全 -->
  {{ count.toFixed(2) }}
</template>

如果沒有使用setup語法,考慮使用defineComponent進(jìn)行包裹,從而實(shí)現(xiàn)類型推導(dǎo)

import { defineComponent } from 'vue'
export default defineComponent({
  // 啟用了類型推導(dǎo)
  props: {
    message: String
  },
  setup(props) {
    props.message // 類型:string | undefined
  }
})

如果項(xiàng)目用Webpack,需要注意下,defineComponent可能導(dǎo)致組件無法被tree shaking, 為了確保組件被安全的tree shaking,需要我們開發(fā)時(shí)做一下處理

export default /*#__PURE__*/ defineComponent(/* ... */)

如果項(xiàng)目用Vite,不需要做任何處理,因?yàn)?code>Vite底層的Rollup會智能的認(rèn)為defineComponent沒有副作用。

defineAsyncComponent (異步組件)

開發(fā)過程中,有一些場景例如:彈框內(nèi)的表單、其它Tab下的組件等在頁面初始化時(shí)不需要加載,我們可以考慮使用defineAsyncComponent來聲明成異步組件,從而提高頁面初始化的速度。

用法一(從服務(wù)器獲取組件)

import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(() => {
    return new Promise((resolve, reject) => {
        // ...從服務(wù)器獲取組件
        resolve(/* 獲取到的組件 */);
    });
});

用法二(異步加載本地組件)

import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(
    () => import('./components/MyComponent.vue')
);

defineAsyncComponent其它參數(shù)配置

 const AsyncComp = defineAsyncComponent({
        // 加載函數(shù)
        loader: () => import('./Foo.vue'),
        // 加載異步組件時(shí)使用的組件
        loadingComponent: LoadingComponent,
        // 展示加載組件前的延遲時(shí)間,默認(rèn)為 200ms
        delay: 200,
        // 加載失敗后展示的組件
        errorComponent: ErrorComponent,
        // 如果提供了一個(gè) timeout 時(shí)間限制,并超時(shí)了
        // 也會顯示這里配置的報(bào)錯(cuò)組件,默認(rèn)值是:Infinity
        timeout: 3000
    });

Suspense

<Suspense> 是一個(gè)內(nèi)置組件,用來在組件樹中協(xié)調(diào)對異步依賴的處理。它讓我們可以在組件樹上層等待下層的多個(gè)嵌套異步依賴項(xiàng)解析完成,并可以在等待時(shí)渲染一個(gè)加載狀態(tài)。

雖然defineAsyncComponent具備loadingComponent參數(shù)來配置加載異步組件時(shí)的Loading組件,但是在一些場景,是需要使用Suspense來使用的。例如:A組件依賴了B、C、D,如果三個(gè)都是異步組件,加載的過程要顯示3個(gè)Loading,而Suspense可以配置所有子組件存在未加載時(shí)而現(xiàn)實(shí)的Loading。

defineCustomElement (使用Vue組件開發(fā)Web Components)

關(guān)于Web Components的介紹請參考文章 Web Components入門

Vue 提供了一個(gè)和定義一般 Vue 組件幾乎完全一致的defineCustomElement方法來支持創(chuàng)建自定義元素。

import { defineCustomElement } from 'vue';
const MyVueElement = defineCustomElement({
    /* 組件選項(xiàng) */
});
// 注冊自定義元素
customElements.define('my-vue-element', MyVueElement);

以上就是Vue3通用API功能示例剖析的詳細(xì)內(nèi)容,更多關(guān)于Vue3通用API剖析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue 實(shí)現(xiàn)輪播圖功能的示例代碼

    Vue 實(shí)現(xiàn)輪播圖功能的示例代碼

    Vue是一款流行的前端框架,它提供了一系列的工具和組件,使得開發(fā)者可以更加便捷地創(chuàng)建交互式的Web應(yīng)用程序,輪播圖是Web應(yīng)用程序中常見的一種交互式組件,本文將介紹如何使用Vue和第三方組件庫 Element UI實(shí)現(xiàn)輪播圖功能,需要的朋友可以參考下
    2023-05-05
  • Vue項(xiàng)目的甘特圖組件之dhtmlx-gantt使用教程和實(shí)現(xiàn)效果展示(推薦)

    Vue項(xiàng)目的甘特圖組件之dhtmlx-gantt使用教程和實(shí)現(xiàn)效果展示(推薦)

    文章介紹了如何使用dhtmlx-gantt組件來實(shí)現(xiàn)公司的甘特圖需求,并提供了一個(gè)簡單的Vue組件示例,文章還分享了一些配置項(xiàng),如格式化表頭日期、設(shè)置甘特圖尺寸、啟用只讀模式、設(shè)置表格列等,感興趣的朋友一起看看吧
    2025-02-02
  • vue2.0項(xiàng)目實(shí)現(xiàn)路由跳轉(zhuǎn)的方法詳解

    vue2.0項(xiàng)目實(shí)現(xiàn)路由跳轉(zhuǎn)的方法詳解

    這篇文章主要介紹了vue2.0項(xiàng)目實(shí)現(xiàn)路由跳轉(zhuǎn)的詳細(xì)方法,非常不錯(cuò),具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Vue2和Vue3的雙向數(shù)據(jù)綁定原理分析

    Vue2和Vue3的雙向數(shù)據(jù)綁定原理分析

    Vue2.x通過Object.defineProperty()實(shí)現(xiàn)響應(yīng)式系統(tǒng),但存在一些限制,如不能檢測新增和刪除的屬性、深層嵌套對象性能開銷大等,Vue3.0引入Proxy,可以更高效地?cái)r截對象操作,解決這些問題
    2025-02-02
  • Vue-CLI 項(xiàng)目在pycharm中配置方法

    Vue-CLI 項(xiàng)目在pycharm中配置方法

    這篇文章主要介紹了Vue-CLI 項(xiàng)目在pycharm中配置方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Vue3中如何使用fullcalendar日歷插件

    Vue3中如何使用fullcalendar日歷插件

    這篇文章主要介紹了Vue3中如何使用fullcalendar日歷插件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • vue使用gitshot生成gif問題

    vue使用gitshot生成gif問題

    這篇文章主要介紹了vue使用gitshot生成gif問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue項(xiàng)目中圖片懶加載時(shí)出現(xiàn)的問題及解決

    vue項(xiàng)目中圖片懶加載時(shí)出現(xiàn)的問題及解決

    這篇文章主要介紹了vue項(xiàng)目中圖片懶加載時(shí)出現(xiàn)的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 關(guān)于element?ui中的el-scrollbar橫向滾動(dòng)問題

    關(guān)于element?ui中的el-scrollbar橫向滾動(dòng)問題

    這篇文章主要介紹了關(guān)于element?ui中的el-scrollbar橫向滾動(dòng)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue-music 使用better-scroll遇到輪播圖不能自動(dòng)輪播問題

    vue-music 使用better-scroll遇到輪播圖不能自動(dòng)輪播問題

    根據(jù)vue-music視頻中slider組建的使用,當(dāng)安裝新版本的better-scroll,輪播組件,不能正常輪播。如何解決這個(gè)問題呢,下面小編給大家?guī)砹藇ue-music 使用better-scroll遇到輪播圖不能自動(dòng)輪播問題,感興趣的朋友一起看看吧
    2018-12-12

最新評論

徐汇区| 尼木县| 怀宁县| 亳州市| 德惠市| 乌拉特后旗| 满洲里市| 盐边县| 西乡县| 达州市| 博罗县| 锡林浩特市| 乃东县| 罗定市| 剑阁县| 石城县| 若尔盖县| 西盟| 乐昌市| 朝阳区| 漯河市| 尼玛县| 平顺县| 靖江市| 卢氏县| 布拖县| 天水市| 谷城县| 靖西县| 惠来县| 汶上县| 漠河县| 柏乡县| 裕民县| 山丹县| 恩平市| 旅游| 泸定县| 新野县| 荃湾区| 虞城县|