成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Vue Demi 構(gòu)建通用的 Vue 組件庫

開發(fā) 前端
在本文中,我們通過考慮其功能、工作原理以及如何開始使用它來了解 Vue Demi。Vue Demi 是一個很棒的包,具有很多潛力和實用性。我強烈建議在創(chuàng)建下一個 Vue 庫時使用它。

在本文中,我們通過考慮其功能、工作原理以及如何開始使用它來了解 Vue Demi。

Vue Demi 是一個很棒的包,具有很多潛力和實用性。我強烈建議在創(chuàng)建下一個 Vue 庫時使用它。

根據(jù)創(chuàng)建者 Anthony Fu 的說法,Vue Demi 是一個開發(fā)實用程序,它允許用戶為 Vue 2 和 Vue 3 編寫通用的 Vue 庫,而無需擔心用戶安裝的版本。

以前,要創(chuàng)建支持兩個目標版本的 Vue 庫,我們會使用不同的分支來分離對每個版本的支持。對于現(xiàn)有庫來說,這是一個很好的方法,因為它們的代碼庫通常更穩(wěn)定。

缺點是,你需要維護兩個代碼庫,這讓你的工作量翻倍。對于想要支持Vue的兩個目標版本的新Vue庫來說,我不推薦這種方法。實施兩次功能請求和錯誤修復(fù)根本就不理想。

這就是 Vue Demi 的用武之地。Vue Demi 通過為兩個目標版本提供通用支持來解決這個問題,這意味著您只需構(gòu)建一次即可獲得兩個目標版本的所有優(yōu)點,從而獲得兩全其美的優(yōu)勢。

在本文中,我們將了解 Vue Demi 是做什么的,它是如何工作的,以及如何開始構(gòu)建一個通用的 Vue 組件庫。

Vue Demi 中的額外 API

除了 Vue 已經(jīng)提供的 API 之外,Vue Demi 還引入了一些額外的 API 來幫助區(qū)分用戶的環(huán)境和執(zhí)行特定于版本的邏輯。讓我們仔細看看它們!

請注意,Vue Demi 還包括 Vue 中已經(jīng)存在的標準 API,例如 ref、onMounted 和 onUnmounted 等。

isVue2 and isVue3

在 Vue Demi 中,isvue2 和 isvue3 API 允許用戶在創(chuàng)建 Vue 庫時應(yīng)用特定于版本的邏輯。

例如:

import { isVue2, isVue3 } from 'vue-demi' 
if (isVue2) {
// Vue 2 only
} else {
// Vue 3 only
}

vue2

Vue Demi 提供了 vue2 API,它允許用戶訪問 Vue 2 的全局 API,如下所示:

import { Vue2 } from 'vue-demi' 
// in Vue 3 `Vue2` will return undefined
if (Vue2) {
Vue2.config.devtools = true
}

install()

在 Vue 2 中,Composition API 作為插件提供,在使用它之前需要安裝在 Vue 實例上:

import Vue from 'vue' 
import VueCompositionAPI from '@vue/composition-api'

Vue.use(VueCompositionAPI)

Vue Demi 會嘗試自動安裝它,但是對于您想要確保插件安裝正確的情況,提供了 install() API 來幫助您。

它作為 Vue.use(VueCompositionAPI) 的安全版本公開:

import { install } from 'vue-demi' 

install()

Vue Demi 入門

要開始使用 Vue Demi,您需要將其安裝到您的應(yīng)用程序中。在本文中,我們將創(chuàng)建一個集成 Paystack 支付網(wǎng)關(guān)的 Vue 組件庫。

你可以像這樣安裝 Vue Demi:

// Npm 
npm i vue-demi

// Yarn
yarn add vue-demi

您還需要添加 vue 和 @vue/composition-api 作為庫的對等依賴項,以指定它應(yīng)該支持的版本。

現(xiàn)在我們可以將 Vue Demi 導(dǎo)入我們的應(yīng)用程序:

<script lang="ts"> 
import {defineComponent, PropType, h, isVue2} from "vue-demi"

export default defineComponent({
// ...
})
</script>

如此處所示,我們可以使用已經(jīng)存在的標準 Vue API,例如 defineComponent、PropType 和h。

現(xiàn)在我們已經(jīng)導(dǎo)入了Vue Demi,讓我們來添加我們的props。這些是用戶在使用組件庫時需要(或不需要,取決于你的口味)傳入的屬性。

上面看到的屬性是使用 Paystack 的 Popup JS 所必需的。

Popup JS 提供了一種將 Paystack 集成到我們的網(wǎng)站并開始接收付款的簡單方法:

<script lang="ts">
import {defineComponent, PropType, h, isVue2} from "vue-demi"
// Basically this tells the metadata prop what kind of data is should accept
interface MetaData {
[key: string]: any
}

export default defineComponent({
props: {
paystackKey: {
type: String as PropType<string>,
required: true,
},
email: {
type: String as PropType<string>,
required: true,
},
firstname: {
type: String as PropType<string>,
required: true,
},
lastname: {
type: String as PropType<string>,
required: true,
},
amount: {
type: Number as PropType<number>,
required: true,
},
reference: {
type: String as PropType<string>,
required: true,
},
channels: {
type: Array as PropType<string[]>,
default: () => ["card", "bank"],
},
callback: {
type: Function as PropType<(response: any) => void>,
required: true,
},
close: {
type: Function as PropType<() => void>,
required: true,
},
metadata: {
type: Object as PropType<MetaData>,
default: () => {},
},
currency: {
type: String as PropType<string>,
default: "",
},
plan: {
type: String as PropType<string>,
default: "",
},
quantity: {
type: String as PropType<string>,
default: "",
},
subaccount: {
type: String as PropType<string>,
default: "",
},
splitCode: {
type: String as PropType<string>,
default: "",
},
transactionCharge: {
type: Number as PropType<number>,
default: 0,
},
bearer: {
type: String as PropType<string>,
default: "",
},
}
</script>

scriptLoaded 狀態(tài)幫助我們知道是否添加了 Paystack Popup JS 腳本,并且 loadScript 方法加載 Paystack Popup JS 腳本并將其添加到我們的文檔頭部。

payWithPaystack 方法用于在調(diào)用時使用 Paystack Popup JS 初始化交易:

render() {
if (isVue2) {
return h(
"button",
{
staticClass: ["paystack-button"],
style: [{display: "block"}],
attrs: {type: "button"},
on: {click: this.payWithPaystack},
},
this.$slots.default ? this.$slots.default : "PROCEED TO PAYMENT"
)
}
return h(
"button",
{
class: ["paystack-button"],
style: [{display: "block"}],
type: "button",
onClick: this.payWithPaystack,
},
this.$slots.default ? this.$slots.default() : "PROCEED TO PAYMENT"
)
}

render 函數(shù)幫助我們創(chuàng)建沒有 標簽的組件,并返回一個虛擬 DOM 節(jié)點。

如果你注意到,我們在條件語句中使用了Vue Demi的一個API,isVue2,來有條件地渲染我們的按鈕。如果沒有這一點,如果我們想在Vue 2應(yīng)用程序中使用我們的組件庫,我們可能會因為Vue 2不支持Vue 3的一些API而遇到錯誤。

現(xiàn)在,當我們構(gòu)建我們的庫時,它可以在 Vue 2 和 Vue 3 中訪問。

完整的源代碼可在此處獲得:https://github.com/ECJ222/vue-paystack2

原文:https://blog.logrocket.com/build-universal-vue-component-library-vue-demi/

作者:Enoch Chejieh

本文轉(zhuǎn)載自微信公眾號「前端全棧開發(fā)者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系前端全棧開發(fā)者公眾號。


責任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關(guān)推薦

2022-09-20 12:21:25

Vue2Vue3$attrs

2020-02-21 11:08:24

瀏覽器HTML設(shè)計

2025-03-05 10:01:44

2020-03-25 18:23:07

Vue2Vue3組件

2016-09-19 13:44:54

vue翻頁組件Web

2022-03-29 12:01:57

Vue 組件js組件工具集

2021-08-01 07:58:58

Vue 加載組件

2009-11-30 08:38:35

WinForm

2023-03-29 08:52:58

視覺Vue組件庫

2016-09-19 21:37:58

vue特效組件Web

2023-08-07 08:52:53

Vue組件Props 命名

2021-04-23 09:40:17

Vue插件框架

2018-01-31 15:45:07

前端Vue.js組件

2020-09-28 15:48:37

開源技術(shù) 軟件

2023-10-12 12:43:16

組件Vue

2021-01-20 15:59:14

開發(fā)Vue組件庫

2017-07-25 08:54:26

前端JsxVue

2024-07-19 08:56:13

2024-05-23 12:45:13

VueMacros語法

2021-09-29 11:33:19

異步組件Vue 3
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99精品久久久久久中文字幕 | 国产精品99久久久久久宅男 | 日韩精品一区在线观看 | 日韩在线免费 | 午夜男人免费视频 | 美女在线视频一区二区三区 | 欧美激情精品久久久久久免费 | 一区二区在线免费观看 | 91精品国产91久久久久福利 | 在线免费看黄 | 日本精品久久久一区二区三区 | 成人福利在线 | 亚洲毛片| 免费观看一级特黄欧美大片 | 久久三区 | 综合久久色| 久久亚洲国产精品 | 一级aaaa毛片 | 久久久久国产一区二区三区 | 国产精品久久久爽爽爽麻豆色哟哟 | 成人免费一级 | 在线视频国产一区 | 久久久一区二区三区四区 | 亚洲人成网站777色婷婷 | 综合久久久 | 久久久久网站 | 91一区二区 | 国产精品久久久免费 | 国产成人综合久久 | 久久久久久综合 | 男人天堂网址 | 中文字幕一区二区三区在线观看 | 日韩欧美综合在线视频 | 亚洲免费一 | 日p视频免费看 | 一级片在线观看 | 日韩美女爱爱 | 亚洲一区二区中文字幕在线观看 | 欧一区二区| 精品欧美乱码久久久久久1区2区 | 成人免费在线 |