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

使用 Vue Demi 構建通用的 Vue 組件庫

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

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

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

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

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

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

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

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

Vue Demi 中的額外 API

除了 Vue 已經提供的 API 之外,Vue Demi 還引入了一些額外的 API 來幫助區分用戶的環境和執行特定于版本的邏輯。讓我們仔細看看它們!

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

isVue2 and isVue3

在 Vue Demi 中,isvue2 和 isvue3 API 允許用戶在創建 Vue 庫時應用特定于版本的邏輯。

例如:

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,您需要將其安裝到您的應用程序中。在本文中,我們將創建一個集成 Paystack 支付網關的 Vue 組件庫。

你可以像這樣安裝 Vue Demi:

// Npm 
npm i vue-demi

// Yarn
yarn add vue-demi

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

現在我們可以將 Vue Demi 導入我們的應用程序:

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

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

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

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

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

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

<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 狀態幫助我們知道是否添加了 Paystack Popup JS 腳本,并且 loadScript 方法加載 Paystack Popup JS 腳本并將其添加到我們的文檔頭部。

payWithPaystack 方法用于在調用時使用 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 函數幫助我們創建沒有 標簽的組件,并返回一個虛擬 DOM 節點。

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

現在,當我們構建我們的庫時,它可以在 Vue 2 和 Vue 3 中訪問。

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

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

作者:Enoch Chejieh

本文轉載自微信公眾號「前端全棧開發者」,可以通過以下二維碼關注。轉載本文請聯系前端全棧開發者公眾號。


責任編輯:武曉燕 來源: 前端全棧開發者
相關推薦

2022-09-20 12:21:25

Vue2Vue3$attrs

2020-02-21 11:08:24

瀏覽器HTML設計

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組件庫

2021-04-23 09:40:17

Vue插件框架

2016-09-19 21:37:58

vue特效組件Web

2023-08-07 08:52:53

Vue組件Props 命名

2018-01-31 15:45:07

前端Vue.js組件

2024-05-23 12:45:13

VueMacros語法

2020-09-28 15:48:37

開源技術 軟件

2023-10-12 12:43:16

組件Vue

2021-01-20 15:59:14

開發Vue組件庫

2021-08-13 07:56:11

App移動應用

2024-07-19 08:56:13

2017-07-25 08:54:26

前端JsxVue
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产农村妇女精品一区 | 欧美爱爱视频网站 | aacc678成免费人电影网站 | 国产一级片一区二区 | 天天看天天操 | 精久久| 日韩三级电影在线看 | www.久久久.com | 夜夜爽99久久国产综合精品女不卡 | 国产精品久久久久久久久免费高清 | 国产成人精品一区二区三 | 超碰成人免费 | 亚洲中午字幕 | 亚洲精品亚洲人成人网 | 自拍视频精品 | 亚洲一区二区精品视频 | 欧美一级大片免费看 | 亚洲一区中文 | 国产成人精品av | 国产精品一级 | 亚洲日本激情 | 亚洲三区在线观看 | 91美女视频 | 欧美日韩综合一区 | 婷婷综合在线 | 日韩中文字幕一区二区三区 | 中文字幕免费 | 成人精品一区二区户外勾搭野战 | 久久99精品视频 | 精品无码久久久久久国产 | 伊人久久在线 | 久久一日本道色综合久久 | 久久久成人动漫 | 欧美三级成人理伦 | 亚洲精品久久久久久久久久久久久 | 精品日韩一区二区 | 精品伊人久久 | 亚洲大片一区 | 欧美6一10sex性hd | 国产农村一级片 | 久久久精品网站 |