在Vue中為什么需要組合API

目前在Vue世界中,最熱門的話題是Composition API,這是Vue 3.0中引入的基于函數(shù)的API。在本文中,我們將學(xué)習(xí)這個新API,然后學(xué)習(xí)如何使用基于函數(shù)的API。我也嘗試以盡可能簡單的方式解釋它。

所以,讓我們開始吧~

在我們深入探討之前,無需擔(dān)心組合API將徹底改變Vue。Composition API是現(xiàn)有組件附加的功能,因此Vue 3.0中沒有重大更改,此外,Vue團隊還創(chuàng)建了一個與Vue 2.x兼容的插件(vue-composition)。

我們先來看一些問題!

為什么需要Vue的組合API?

隨著Vue的日益普及,人們也開始在大型和企業(yè)級應(yīng)用程序中采用Vue。由于這種情況,在很多情況下,此類應(yīng)用程序的組件會隨著時間的推移而逐漸增長,并且有時使用單文件組件人們很難閱讀和維護。因此,需要以邏輯方式制動組件,而使用Vue的現(xiàn)有API則不可能。

Vue已有的替代方案缺點是什么?

在引入新的API之前,Vue還有其他替代方案,它們提供了諸如mixin,HOC(高階組件),作用域插槽之類的,提高組件之間的復(fù)用性,但是所有方法都有其自身的缺點,由于它們未被廣泛使用。

  1. Mixins:一旦應(yīng)用程序包含一定數(shù)量的mixins,就很難維護。開發(fā)人員需要訪問每個mixin,以查看數(shù)據(jù)來自哪個mixin。
  2. HOC:這種模式不適用于.vue 單文件組件
  3. 作用域插槽:在組件模板中放置了越來越多的插槽,導(dǎo)致數(shù)據(jù)來源不明確。

簡而言之,組合API有助于

  1. 由于API是基于函數(shù)的,因此可以有效地組織和編寫可復(fù)用的代碼。
  2. 通過將共享邏輯分離為功能來提高代碼的可讀性。
  3. 實現(xiàn)代碼分離。
  4. 在Vue應(yīng)用程序中更好地使用TypeScript。

讓我們來使用API構(gòu)建一個簡單的應(yīng)用程序。

1)導(dǎo)入vue-composition插件

npm install @vue/composition-api --save

2)在導(dǎo)入任何其他API之前,將插件安裝到Vue應(yīng)用程序。需在其他任何插件之前進行注冊,Composition API可以在其他插件中使用,就像它是Vue的內(nèi)置功能一樣。

import VueCompositionApi from '@vue/composition-api';
Vue.use(VueCompositionApi);

3)使用組合API,讓我們創(chuàng)建一個小的功能以更好地了解API。創(chuàng)建一個名為composition-fns的新文件夾,并創(chuàng)建一個名為 toggle.js 的文件

在這里,我們從API導(dǎo)入ref,并使用它聲明變量 isVisible,其默認(rèn)值為 false。除此之外,還有一種稱為“切換”的方法,它負(fù)責(zé)用于切換 isVisible 的值。

import { ref } from "@vue/composition-api";


export const useToggle = () => {
  const isVisible = ref(false);


  const toggle = () => {
    return (isVisible.value = !isVisible.value);
  };


  return {
    isVisible,
    toggle
  };
};

4)首先,導(dǎo)入useToggle 函數(shù),然后在組件中使用,Composition API提供了 setUp() 函數(shù)。這個啟動函數(shù)再組件渲染時會執(zhí)行。

import { useToggle } from "./composition-fn/toggle";


setup() {
  const { isVisible, toggle } = useToggle();
  // expose to template
  return {
    isVisible,
    toggle
  };
}

5)最后,模板由按鈕和div組成,以顯示和隱藏切換值。

<div>{{ isVisible }}</div>


<button type="button" @click="toggle">
  {{isVisible ? 'hide' : 'show' }} Toggle
</button>

點“閱讀原文”查看完整代碼!

main.js

import Vue from "vue";
import App from "./App.vue";
import VueCompositionApi from '@vue/composition-api';

Vue.use(VueCompositionApi);

Vue.config.productionTip = false;

new Vue({
  render: h => h(App)
}).$mount("#app");

app.vue

<template>
  <div id="app">
    <div>{{ isVisible }}</div>
    <button type="button" @click="toggle">{{isVisible ? 'hide' : 'show' }} Toggle</button>
  </div>
</template>

<script>
import { useToggle } from "./composition-fn/toggle";
export default {
  name: "App",
  setup(props, context) {
    const { isVisible, toggle } = useToggle();
    // expose to template
    return {
      isVisible,
      toggle
    };
  }
};
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

composition-fn/toggle.js

import { ref } from "@vue/composition-api";

export const useToggle = () => {
  const isVisible = ref(false);

  const toggle = () => {
    console.log(isVisible);
    return (isVisible.value = !isVisible.value);
  };

  return {
    isVisible,
    toggle
  };
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 element★...
    嘗了又嘗閱讀 1,284評論 0 1
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    小姜先森o0O閱讀 10,114評論 0 72
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    隨行者pgl閱讀 3,543評論 0 15
  • 為你寫詩 如果說還有什么是可以留下的 我想那就只有此刻了 時間和你我都留不住 那就留下這片刻的思念 說不定多年以后...
    身后一扇窗閱讀 160評論 0 0
  • 歸家殘日照西廂,新燕銜泥滿春光 舊年梅雪落老寺,月下獨酌酒一殤
    淮亭閱讀 124評論 0 2

友情鏈接更多精彩內(nèi)容