【組件庫從0到1】Vite + Vue3 + TSX開發指南

2021-12-28 前端大班車
不少前端小夥伴問過我,說業務代碼寫了2、3年了,應該如何再進一步?村長的回答中大多數會提到兩個關鍵點:加強工程化實踐能力底層原理源碼知識。工程化能力對於小夥伴們在工作中解決問題有直接影響,如果你想成為小組內的核心程式設計師,拿更高的職位和薪資,能夠給大家搭架子,解決問題,重難點突破是非常關鍵的幾個考察點。實踐中,我們如何刻意提升自己這方面的能力,我覺得給公司搭建一套組件庫就很好。在這個過程中大家需要解決不少工程問題,比如:

這些任務對於日常和業務打交道的同學來說當然很有挑戰性,12月16日,村長特意準備了一節0元公開課《vue3+ts組件庫開發實戰》,本次課準備給小夥伴們實戰一下Tree組件的開發,深度體驗vue3+tsx開發的各種知識點。

報名連結

知識儲備

本次我要帶大家編寫一個Tree組件,會用到JSX,因此我們提前做一些知識儲備:

Vite中引入JSX

本次Tree組件實現要用到JSX支持,所以小夥伴們有必要先了解如何在Vite項目中引入JSX。

我們可以通過一個叫做@vitejs/plugin-vue-jsx插件實現,

首先安裝它:

yarn add @vitejs/plugin-vue-jsx -D

配置一下該插件,vite.config.ts:

// vite.config.js
import vueJsx from '@vitejs/plugin-vue-jsx'

export default {
  plugins: [
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    })
  ]
}

測試一下,components/Tree.tsx

export default () => <div>tree</div>

如何定義一個組件

在TSX文件中定義組件有幾種常用方式:

函數式組件:最簡單的方式,你可以把它理解為setup函數,但是不同之處它可以直接返回JSX
export default (props, ctx) => <div>tree</div>

defineComponent:傳遞render選項,也就是Options API,這種缺點是要訪問this
export default defineComponent({
render() {
return <div>tree</div>
}
})

defineComponent:傳遞setup選項,利用Composition API,避免this,是推薦的形式
export default defineComponent({
setup(props, ctx) {
return () => <div>tree</div>
}
})

Vue3中JSX/TSX特殊語法

如果有過react的開發經驗,可以發現除了vue中獨有的幾個新概念:slot、directive、emit等以外,其他都是相同的,因此這裡僅關注這些特殊部分:

指令

指令使用需要我們轉換思維,有幾種不同情況:

常用指令v-model,v-show跟以前用法類似,但也要注意後面是{},不是""
<input type="text" v-model={this.counter} />

<div>{ condition ?  <span>A</span> : <span>B</span> }</div>

import { defineComponent, ref } from "vue";
const App = defineComponent({
setup(){
const list = ref<string[]>([])
return () => {
list.value.map((data,index) => <p key={index}>{data}</p>)
}
}
});

插槽

JSX中想要實現Vue中的插槽寫法也有很大不同,主要利用一個叫做v-slots的指令來實現:

Parent.tsx

export default defineComponent({
setup() {
return () => (
<Child
v-slots={{
prefix: () => <i>prefix</i>, // 具名插槽
suffix: (props: Record<"name", string>) => <span>{props.name}</span>, // props可作插槽作用域的作用
}}
>
默認插槽內容
</Child>
);
},
});

const Child = defineComponent({
setup(props, { slots }) {
return () => (
<>
默認插槽: {slots.default && slots.default()}
<br />
具名插槽: {slots.prefix && slots.prefix()}
<br />
作用域插槽:{slots.suffix && slots.suffix({ name: "suffix" })}
</>
);
},
});

emit

vue中子向父傳值一般都是emit的方式,這個在vue3中大致寫法相似,只是多了一個定義emit的步驟,這也是為了後續的類型推倒做準備。

defineComponent({
emits: ["click"],
setup(props ,{ emit }) {
return () => (
<button onClick={() => {emit("click")}}>點我觸發emit</button>
);
},
});

村長公開課

相關焦點

  • 手把手教你搭建基於 Vue3 的前端組件庫
    目前項目依然處於開發階段,小夥伴們有興趣可以跟著一起練習一下,也歡迎參與到項目中,項目參考地址 GitHub ,歡迎 star、issue、fork 和 PR 。代碼易讀文檔頁文檔頁實際由頂邊欄和本體構成,本體包含側邊欄和內容區域頂邊欄-文檔頁小於 500px 時,在左側額外顯示彈出側邊欄的按鍵,並使得側邊欄不可見側邊欄默認可見,選中高亮,但視口寬度小於 500px 時,默認不可見 包含兩個部分:指南和組件,各自有子級跳轉內容區域根據側邊欄中選中的連結,顯示 md 內容或組件範例內容搭建官網創建方式有很多,而我這裡選擇通過 Vite 進行創建 Vue3
  • 基於 vite 的組件文檔編寫神器,又快又省心
    特性vite-plugin-react-pages(vite-pages) 是一個由 vite 提供支持的 React 應用程式框架。它非常適合:它提供了許多幫助開發人員快速構建 React App 的功能:很棒的開發體驗。
  • Vite 開發快速入門
    1.2 瀏覽器支持二、環境搭建2.1 創建項目根據Vite官網介紹,我們可以使用npm或yarn來初始化Vite項目,並且Node.js的版本需要 >= 12.0.0。除此之外,還可以通過附加的命令行選項直接指定項目名稱和模板。
  • Vue 3全新的Web開發構建工具——Vite介紹
    ,目前僅支持Vue 3.x,這意味著與Vue 3不兼容的庫也不能與Vite一起使用。不過Vite項目的默認配置文件是vite.config.js,而不是vue.config.js。: "vite","build": "vite build"},"dependencies": {"vue": "^3.0.2"},
  • Vue3.0+typescript+Vite+Pinia+Element-plus搭建vue3目前最流行的項目框架!
    隨著vue3.0的越來越受歡迎,開始有許多公司和個人開始學習並使用vue3開發項目。我從接觸學習並使用vue2,到現在的vue3,工作中也一直在使用vue。vue3也發布很長時間了,目前vue3+vite+ts再結合一些優秀的UI框架,如Element plus,Ant design,Naive UI,移動端的Vant UI,成為了較為流行的前端技術之一。那麼今天就帶大家一起來搭建一個Vue3的項目吧!兼容性注意Vite 需要 Node.js 版本 >= 12.0.0。
  • Vue3 知名組件庫 NaiveUI 源碼揭秘
    最近程式設計師巴士學習交流群裡有小夥伴想要了解一下如何看源碼,正好最近有一點心得感悟,之前也寫過一篇實際跑通 NaiveUI 源碼的文章:尤大都推薦的組件庫是如何開發出來的?[1] 源碼的經驗,來給大家分享一下。心理認知要到位首先要認識到,看源碼是一個開始比較枯燥、同時時間跨度相對比較長的一個過程。
  • 一文搞定前端自動化測試(Vue 實戰)
    ,這裡選用了 `Vite`[5] 作為構建工具來創建項目,用 @vitejs/app 創建一個 vue-ts 項目。@vitejs/plugin-vue-jsx:提供開發時在 Vue 中使用 JSX/TSX 語法的 Vite Plugin。vite-plugin-windicss:提供開發時在 Vue 中使用 Windi CSS 能力的 Vite Plugin。
  • 從零開始擼一個Vue3.0組件庫-並上傳到NPM上
    前言今日前端早讀課文章由@傲夫靠斯投稿分享。
  • 把 Vue-cli 項目遷移至 Vite!
    [譯] 原文地址:https://medium.com/nerd-for-tech/from-vue-cli-to-vitejs-648d2f5e031d背景我最近將一些 Vue2 項目從vue-cli/webpack遷移到了 vite。
  • Vue 3 首個 RC 版本發布
    現在,大部分的官方框架組件已支持 Vue 3,點此查看最新狀態。新的文檔Vue 文檔團隊已對 v3 版本的文檔進行更新,現在可以在 v3.vuejs.org 查看。從 v2 到 v3 版本的文檔遷移過程十分精細,新的文檔涵蓋了 v2 和 v3 之間的差異,可以在 VuePress 上運行,並改進了可以在線編輯的代碼示例。詳情查看遷移指南。※ 注意:新的文檔,尤其是遷移指南目前仍在開發中,Vue 團隊在 RC 階段會繼續進行完善。
  • Vue3+TypeScript完整項目上手教程
    一個完整的Vue3+Ts項目,支持.vue和.tsx寫法項目地址:https://github.com/vincentzyc/vue3-demo.gitTypeScript 是JS的一個超集,主要提供了類型系統和對ES6的支持,使用 TypeScript 可以增加代碼的可讀性和可維護性,在 react 和 vue 社區中也越來越多人開始使用
  • Vue.js 3.0 "One Piece" 正式版發布
    時至今日,我們在全球擁有 130 多萬的用戶,我們看到 Vue 被應用於各種不同的場景中的可能,從在傳統的服務端渲染頁面之上添加交互,到擁有數百個組件的完整單頁應用。Vue 3.0 將這種靈活性進一步提升。
  • Vue3.0七大亮點
    減少創建組件實例的開銷vue2.x每創建一個實例,在this上要暴露data、props、computed這些,都是靠Object.defineProperty去定義的。這部分操作還是挺費時的。vue3.0中基於Proxy,減少了創建組件實例的性能開銷。
  • 2018 年你需要知道的 Vue.js 組件庫,完善你的應用開發
    使用其組件你可以獨立思考 UI 的每個片段,鼓勵可重用性和模塊化,並幫助保持 UI 的一致性。所有的 Vue 組件也都是 Vue 實例,所以接受相同的選項對象並提供相同的生命周期鉤子函數。幾乎沒有文檔,這個庫有超過 35 個組件可供選擇和有一個乾淨整潔的界面。
  • 現代 Vue 工程之「國際化 i18n 開發」
    本期主要介紹的工具是 VSCode 插件 i18n-ally國際化 i18n 開發滿足的條件接下來,我會通過 Vite 創建一個 Vue 3 演示工程來和大家實踐一下在 Vue 工程中如何做國際化的🌰 工程地址:
  • Vue2.0父子組件間通信
    vue2.0Vue.js是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue 從根本上採用最小成本、漸進增量的設計。Vue 的核心庫只專注於視圖層,並且很容易與其他第三方庫或現有項目集成。另一方面,當與單文件組件和 Vue 生態系統支持的庫結合使用時,Vue 也完全能夠為複雜的單頁應用程式提供有力驅動。
  • 2020年5個最佳Vue移動端組件庫|UI框架
    小夥伴們平時開發vue,react或是angular項目,都喜歡使用的什麼UI組件庫呢?今天,就來盤點下,幾個熱門優質的Vue.js移動端UI組件庫。1、Mint UI餓了麼開源的移動端UI組件庫,基於vue.js的移動端UI框架,包含豐富的 CSS 和 JS 組件,能夠滿足日常的移動端開發需求。
  • Vue 3.0前的 TypeScript 最佳入門實踐
    name; // 斷言e是非空並訪問name屬性3.2 泛型: Generics軟體工程的一個主要部分就是構建組件,構建的組件不僅需要具有明確的定義和統一的接口,同時也需要組件可復用。支持現有的數據類型和將來添加的數據類型的組件為大型軟體系統的開發過程提供很好的靈活性。
  • 如何從零到一成為 Vue3 組件庫 Naive UI 的貢獻者?
    如果喜歡我的文章,可以關注 ➕ 點讚,為我注入能量,與我一同成長吧~閱讀本文 🦀1.您將了解到發現了開源項目出現的 bug 我們可以怎麼做2.您將了解到如何快速定位開源項目BUG問題所在3.您將了解到如何參與開源項目bug修復並提交PR成為ContributesNaiveUI 倉庫地址 :NaiveUI[1]🎄如果你正在學習vue3+TS,那麼我建議你可以關注一下NaiveUI
  • Vue CLI 3.0 正式發布,Vue.js 開發標準化工具
    Vue CLI 3.0 已發布,該版本經歷了重構,旨在:減少現代前端工具的配置煩擾,尤其是在將多個工具混合在一起使用時;儘可能在工具鏈中加入最佳實踐,讓它成為任意