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

搞不定大型項(xiàng)目?4個項(xiàng)目實(shí)踐看清Vue.js的真正實(shí)力

開發(fā) 前端
在搜索Vue的局限性時(shí),我發(fā)現(xiàn)很多人都提到了它對大型項(xiàng)目缺乏支持這一現(xiàn)象。不過在深入了解之后,我可以自信地說并非如此。因此,本文將討論4種可用于組織大型Vue.js項(xiàng)目的優(yōu)秀實(shí)踐。

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)。

作為基于JavaScript的框架,Vue.js最近幾年中發(fā)展迅速,原因很多,包括框架的簡單性、易于集成性、用戶友好性以及限制較少等等,這些特性也幫助Vue.js在與Angular和React競爭時(shí)有一戰(zhàn)之力。

但在搜索Vue的局限性時(shí),我發(fā)現(xiàn)很多人都提到了它對大型項(xiàng)目缺乏支持這一現(xiàn)象。不過在深入了解之后,我可以自信地說并非如此。因此,本文將討論4種可用于組織大型Vue.js項(xiàng)目的優(yōu)秀實(shí)踐。

[[342044]]

1. 使用Vue Slots使代碼易于理解

父子關(guān)系是組件之間相互連接的最常用方法之一,但有時(shí)這可能并不是最佳選擇。想象一下,如果出現(xiàn)在單個父組件中有大量子組件的情況,那么可能就不得不使用大量道具和發(fā)出事件來處理這些子組件,很快一切會變得一團(tuán)糟。

這就是在大型項(xiàng)目中將要面臨的真實(shí)情況,不過,Vue.js可以提供針對此問題的現(xiàn)場解決方案。

我們可以在Vue.js中使用slots來提供表示父子關(guān)系的另一種方法,slots提供了將內(nèi)容放置在新位置的渠道。slots的基本操作示例如下所示:

  1. <div> 
  2.    <slot></slot> 
  3. </div> 

當(dāng)上面的組件呈現(xiàn)的 標(biāo)簽將被demo-content替換時(shí):

  1. <demo-content> 
  2.   <h2>Hi!</h2> 
  3.   <class-name name="Welcome toVue!"></class-name> 
  4. </demo-content> 

你可以在Vue項(xiàng)目中使用多種不同類型的slots。但最重要的一點(diǎn)是,當(dāng)slots在增多時(shí),項(xiàng)目也會隨之受到巨大的影響,slots可以使得整個項(xiàng)目中的代碼維持完整且易于理解。

2. 建立并共享獨(dú)立的組件

AddyOsmani:“有效構(gòu)建‘大型'事物的秘訣通常是避免從一開始就抱著直接構(gòu)建大型事物的想法。相反,可以用更小、更集中的作品來構(gòu)成大型事物。這樣一來,就更容易看到小的事物是如何組成大的事物的了。”

你可以遵循F.I.R.S.T原則,將自己的組件構(gòu)建為:專注的、獨(dú)立的、可重復(fù)使用的以及小型且可測試的。

還可以使用Bit(Github)之類的工具對每個項(xiàng)目的組件進(jìn)行獨(dú)立式源代碼管理,并將其共享給Bit的組件中心。共享的組件、自動生成的文檔和實(shí)時(shí)示例將一起顯示在Bit的組件中心上??梢允褂肗PM進(jìn)行安裝或使用Bit對其進(jìn)行“克隆”和修改,這會使查找、使用和維護(hù)組件變得更加容易(因此,也更易于維護(hù)項(xiàng)目)。

搞不定大型項(xiàng)目?4個項(xiàng)目實(shí)踐看清Vue.js的真正實(shí)力

Vue components shared on Bit.dev

3. 維護(hù)良好的VUEX倉庫

Vuex是Vue.js中的狀態(tài)管理模式,它負(fù)責(zé)應(yīng)用程序中所有組件的集中存儲功能。我看到有些評論說:“Vuex限制了開發(fā)人員根據(jù)需要構(gòu)造項(xiàng)目”。但事實(shí)是,Vuex可以通過使用一組原則來幫助開發(fā)人員以更有條理的方式組織他們的項(xiàng)目。

在了解這些原理之前,首先應(yīng)該先了解以下4個Vuex倉庫中的主要組件:

  • States:用于保存應(yīng)用程序的數(shù)據(jù)
  • Getters:用于訪問倉庫外部的狀態(tài)對象
  • Mutations:用于修改狀態(tài)對象
  • Actions:用于處理mutations

那么接下來看看需要遵循的原則:

  • 需要將應(yīng)用程序級別狀態(tài)集中在倉庫中。
  • states應(yīng)始終通過處理mutations來進(jìn)行改變。
  • 異步邏輯應(yīng)該被封裝,并且只能與actions一起使用。

遵循這三個原則,項(xiàng)目就可以被順利地組織出來,并且如果你覺得存儲文件越來越大,可以將它們拆分成單獨(dú)的文件。示例項(xiàng)目結(jié)構(gòu)如下所示:

  1. ├── index.html 
  2. ├── main.js 
  3. ├── api 
  4. ├── components 
  5. └── store 
  6.     ├── index.js          
  7.     ├── actions.js 
  8.     ├── mutations.js 
  9.     └── modules 

模塊化VUEX倉庫

搞不定大型項(xiàng)目?4個項(xiàng)目實(shí)踐看清Vue.js的真正實(shí)力

圖源:unsplash

本文中討論的是大型項(xiàng)目,此類項(xiàng)目中的項(xiàng)目文件會非常大而復(fù)雜。你需要以自己的方式管理倉庫,并且需要避免商店倉庫,因此最好以易于他人理解的方式對Vuex倉庫進(jìn)行模塊化。

在此我們沒有定義項(xiàng)目中模塊的定義方法,有些開發(fā)人員會根據(jù)功能進(jìn)行模塊化,有些則根據(jù)數(shù)據(jù)模型進(jìn)行模塊化。關(guān)于模塊化的最終決定完全取決于你自己,這將對個人和團(tuán)隊(duì)有長期幫助。

  1. store/ 
  2.    ├── index.js   └── modules/       ├── module1.store.js       ├── module2.store.js       ├── module3.store.js       ├── module4.store.js       └── module5.store.js 

使用助手來簡化代碼

前文提到了Vuex倉庫中使用的4個組件。假設(shè)如果出現(xiàn)需要訪問這些states、getters或需要調(diào)用actions或組件中的mutations的情況,那么無需創(chuàng)建多個計(jì)算屬性或方法,就可以輕松使用輔助方法(mapState, mapGetters, mapMutations 和 mapActions)來減少代碼。

來看看這四個輔助工具:

(1) mapState

如果需要在一個組件中調(diào)用多個存儲狀態(tài)屬性或getters,就可以使用mapState幫助生成一個getter函數(shù),這將大大減少代碼行的數(shù)量。

  1. import { mapState } from 'vuex'export default { 
  2.   computed: mapState({ 
  3.     count: state => state.count, 
  4.     countAlias: 'count', 
  5.     countPlusLocalState (state) {      return state.count +this.localCount 
  6.     }  })} 

(2) mapGetters

mapGetters可幫助將倉庫getters映射到本地計(jì)算屬性。

  1. import { mapGetters } from 'vuex'export default { 
  2.   computed: {    ...mapGetters([      'count1', 
  3.       'getter1', 
  4.     ])  }} 

(3) mapMutations

mapMutations可以用于幫助提交組件中的mutations,它將組件方法映射到store.commit調(diào)用。同樣,也可以使用mapMutations傳遞有效載荷。

  1. import { mapMutations } from 'vuex'export default { 
  2.   methods: {    ...mapMutations({      cal: 'calculate' // map`this.cal()` to `this.$store.commit('calculate')` 
  3.     })  }} 

(4) mapActions

可以用于幫助在組件中分派操作,并將組件方法映射到store.dispatch調(diào)用。

  1. import { mapActions } from 'vuex'export default { 
  2.   methods: {    ...mapActions({      cal: 'calculate' // map`this.cal()` to `this.$store.dispatch('calculate')` 
  3.     })  }} 

4. 不要忘記編寫單元測試

測試在任何項(xiàng)目中都很重要。作為開發(fā)人員,無論項(xiàng)目的重要性或規(guī)模如何,我們都必須測試開發(fā)的內(nèi)容。尤其是在涉及大型項(xiàng)目中,往往有成千上萬的小型功能,因此我們有責(zé)任測試每個功能。

這就是單元測試的必要性,它可以使開發(fā)人員測試單個代碼單元。單元測試不僅可以避免錯誤,而且每當(dāng)開發(fā)人員進(jìn)行更改時(shí),修改的結(jié)果也可以提升開發(fā)團(tuán)隊(duì)對其工作的信心。隨著項(xiàng)目的進(jìn)行,開發(fā)人員可以從項(xiàng)目的開始就遵循良好的單元測試機(jī)制來添加新功能,不必?fù)?dān)心會破壞其他功能。

在Vue.js中進(jìn)行的單元測試與所有其他框架的單元測試方法大同小異,你可以輕松地將Jest,Karma或Mocha與Vue.js結(jié)合使用。盡管有測試框架,但是在編寫單元測試時(shí),還是有些需要記住的一般性事項(xiàng):

  • 編寫單元測試以涵蓋每個Vue組件。
  • 測試必須提供清晰的失敗錯誤消息ID。
  • 使用良好的斷言庫。例如:在Jest框架中內(nèi)置了斷言庫,Chai斷言庫與Mocha一起使用。

搞不定大型項(xiàng)目?4個項(xiàng)目實(shí)踐看清Vue.js的真正實(shí)力

圖源:unsplash

通過從項(xiàng)目開始就遵循這些步驟的方法,隨著項(xiàng)目結(jié)構(gòu)的發(fā)展,開發(fā)人員可以大大減少調(diào)試和手動測試所花費(fèi)的時(shí)間。

除了單元測試之外,Vue.js與其他任何框架一樣都支持E2E測試和集成測試。因此,你也可以將這些也結(jié)合到項(xiàng)目中。通常,路由部分不會使用單元測試進(jìn)行測試,并且通過端到端測試進(jìn)行覆蓋。Vue倉庫是最難測試的部分,對states,actions或getters的單獨(dú)測試往往被認(rèn)為是無用的,我推薦的方法是集成測試。

看看這優(yōu)秀的技術(shù)能力,我認(rèn)為Vue.js用于大規(guī)模項(xiàng)目完全沒問題,它可以輕松地管理這些項(xiàng)目而不會造成混亂。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-08-30 14:32:57

Vue.jsJavaScript前端

2021-09-27 09:04:40

Vue.js代碼庫開發(fā)人員

2021-09-27 10:48:42

開發(fā)技能代碼

2015-08-26 10:36:32

ios開發(fā)漫談

2015-08-31 10:11:43

iOS大項(xiàng)目開發(fā)

2021-05-12 08:54:56

FastAP web 框架數(shù)據(jù)庫操作

2024-12-26 08:00:38

2020-11-04 09:58:17

vue開發(fā)Github

2022-03-14 10:24:31

編程語言開發(fā)

2018-04-04 10:32:13

前端JavascriptVue.js

2022-01-26 13:00:07

Vue.js UI組件Web

2021-07-24 11:41:42

前端開發(fā)技術(shù)

2012-04-01 15:03:39

大型項(xiàng)目開發(fā)者

2023-01-06 07:37:08

JavaScript技巧t性能

2021-01-26 05:39:06

項(xiàng)目模塊代碼

2021-01-13 09:34:45

項(xiàng)目Gson框架

2022-02-10 10:48:23

JavaScriptVue.js數(shù)據(jù)

2017-07-21 09:56:46

Webpack3 Vue.js腳手架

2024-01-22 09:17:35

2024-02-21 09:32:18

開發(fā)架構(gòu)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 中文字幕一区二区在线观看 | a国产一区二区免费入口 | 国产精品一区在线 | 天天干天天插 | 久久成人免费 | 亚洲一区二区网站 | 羞羞网站免费 | 日韩三级在线观看 | 日韩在线视频免费观看 | 99精品热视频 | 99成人| 日韩一区二区三区精品 | 91视视频在线观看入口直接观看 | 婷婷久久网 | 国产在线中文字幕 | 国产精品久久久久久久久久久久 | 岛国在线免费观看 | 在线色网 | 99亚洲精品 | 欧洲av一区 | 亚洲高清三级 | 天天操伊人| 日本高清精品 | 久久久99国产精品免费 | 成人av网站在线观看 | 亚洲一区二区国产 | 一区二区三区视频在线观看 | 日韩喷潮| 日本亚洲欧美 | 亚洲欧美国产精品一区二区 | 久久久91精品国产一区二区精品 | 在线观看国产网站 | 国产综合视频 | 在线视频a | 久久看片| 欧美日韩不卡合集视频 | 免费在线成人 | 欧美日韩亚洲国产 | 在线观看av网站 | 91丨九色丨国产在线 | 中文字幕视频在线观看免费 |