中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue3通用API功能如何使用

發布時間:2023-05-16 17:02:10 來源:億速云 閱讀:112 作者:iii 欄目:編程語言

這篇文章主要介紹了Vue3通用API功能如何使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Vue3通用API功能如何使用文章都會有所收獲,下面我們一起來看看吧。

通用API

version (暴漏當前使用的Vue版本)
import Vue from 'vue';
export default {
    setup(props, context) {
        console.log(Vue.version);
        return {};
    }
};
nextTick (Dom更新完成后觸發,用于獲取更新后的Dom)

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

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

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

使用案例

<template>
    <div class="test_demo">
        <h4 class="text">{{ text }}</h4>
        <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>

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

為什么會有這個問題?

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

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

defineComponent(類型推導的輔助函數, 讓 TypeScript 正確地推導出組件選項內的類型)

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

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

如果沒有使用setup語法,考慮使用defineComponent進行包裹,從而實現類型推導

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

如果項目用Webpack,需要注意下,defineComponent可能導致組件無法被tree shaking, 為了確保組件被安全的tree shaking,需要我們開發時做一下處理

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

如果項目用Vite,不需要做任何處理,因為Vite底層的Rollup會智能的認為defineComponent沒有副作用。

defineAsyncComponent (異步組件)

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

用法一(從服務器獲取組件)
import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(() => {
    return new Promise((resolve, reject) => {
        // ...從服務器獲取組件
        resolve(/* 獲取到的組件 */);
    });
});
用法二(異步加載本地組件)
import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(
    () => import('./components/MyComponent.vue')
);
defineAsyncComponent其它參數配置
 const AsyncComp = defineAsyncComponent({
        // 加載函數
        loader: () => import('./Foo.vue'),
        // 加載異步組件時使用的組件
        loadingComponent: LoadingComponent,
        // 展示加載組件前的延遲時間,默認為 200ms
        delay: 200,
        // 加載失敗后展示的組件
        errorComponent: ErrorComponent,
        // 如果提供了一個 timeout 時間限制,并超時了
        // 也會顯示這里配置的報錯組件,默認值是:Infinity
        timeout: 3000
    });
Suspense

<Suspense> 是一個內置組件,用來在組件樹中協調對異步依賴的處理。它讓我們可以在組件樹上層等待下層的多個嵌套異步依賴項解析完成,并可以在等待時渲染一個加載狀態。

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

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

關于Web Components的介紹請參考文章 Web Components入門

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

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

關于“Vue3通用API功能如何使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Vue3通用API功能如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福泉市| 凭祥市| 光山县| 吉安县| 抚州市| 铅山县| 高雄县| 龙州县| 永清县| 绿春县| 安达市| 通化市| 化州市| 嘉义市| 郎溪县| 措勤县| 安图县| 成武县| 衡东县| 凤冈县| 嵩明县| 运城市| 昌图县| 长春市| 通化市| 天台县| 内丘县| 皋兰县| 古交市| 天祝| 青铜峡市| 阿拉尔市| 青川县| 兰考县| 天津市| 东乌| 嘉兴市| 澎湖县| 光泽县| 昌吉市| 双鸭山市|