傻瓜式vuex語(yǔ)法糖kiss-vuex整理
前言
vuex 作為 vue 框架狀態(tài)數(shù)據(jù)管理模塊,誕生已有些許年頭,它的出現(xiàn)很好地解決了兄弟組件響應(yīng)式狀態(tài)數(shù)據(jù)通信的問(wèn)題。但是,vuex 的學(xué)習(xí)是一定門(mén)檻的,同時(shí)其聲明和使用方式有一些不夠簡(jiǎn)潔。一般情況下,我們會(huì)使用 new Vue({store})這種方式注入 Store,在組件中使用很 mapGetters 或 mapActions 等來(lái)引入 getters 和 actions 等,但隨著項(xiàng)目狀態(tài)數(shù)據(jù)增長(zhǎng),你會(huì)發(fā)覺(jué)越來(lái)越難以維護(hù),因?yàn)檫@些數(shù)據(jù)和方法都太過(guò)分散。
看到這里,如果你還是不懂 vuex 是何物,或者你已經(jīng)使用了 vuex 但是很不習(xí)慣它的用法,沒(méi)有關(guān)系,你可以繼續(xù)閱讀本篇。實(shí)際上,在引入了 kiss-vuex 后,你甚至并不需要深刻理解 vuex 就能夠很好地使用它。
如果有糖和白水,你會(huì)作何選擇?我會(huì)選擇把糖放入白水,味道更為完美。
介紹
kiss-vuex 是一個(gè)非常簡(jiǎn)單的語(yǔ)法糖類(lèi)庫(kù),遵循軟件工程里的 KISS 原則,僅僅暴露一個(gè)方法:Store。壓縮版本僅僅只有 3KB,所以你可以放心加入到你的代碼中。此處貼出幾個(gè)有用的鏈接:
安裝和使用
通過(guò) npm :
$ npm i kiss-vuex
注意:需要先行安裝 vue 和 vuex。
在你的代碼中,可以加入這樣一個(gè) js 文件:
// appStore.js
import { Store } from 'kiss-vuex';
@Store
class AppStore {
counter = 0;
}
const appStore = new AppStore();
export { AppStore, appStore }
OK,一個(gè) store 就聲明好了。What!? 這么簡(jiǎn)單嗎?對(duì),就是這么簡(jiǎn)單。
我們對(duì)比下原始的 store 的聲明方式:
import Vuex from 'vuex';
const appStore = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
},
actions: {
increment (context) {
context.commit('increment')
}
}
});
export { appStore }
怎么樣,是否有很明顯的差別?
kiss-vuex 提供了一種極為簡(jiǎn)潔的聲明方式,通過(guò) Store 裝飾器,你能夠快速獲得一個(gè) Store 類(lèi),然后實(shí)例化導(dǎo)出。在你需要使用到的地方將這個(gè) store 引入,加入到組件的 computed 屬性下。
貼一段使用示例代碼:
// hello.component.js
import Vue from 'vue';
import { appStore } from './AppStore';
export default Vue.component('app-hello', {
template:
`<div>
<p>Click times: {{counter}}</p>
<button @click="doClick()">add counter</button>
</div>`,
computed: {
counter() {
return appStore.counter;
}
},
methods: {
doClick() {
appStore.counter++;
}
}
})
如果你有使用 Angular2+ 的經(jīng)驗(yàn),不難看出 kiss-vuex 里的 @Store 與 Angular 中的 @Service 十分類(lèi)似。事實(shí)上,kiss-vuex 正是借鑒了這種模式,在未來(lái)的 vue3.0+ 版本中,也會(huì)有類(lèi)似的語(yǔ)法特性。
當(dāng)然,你依然可以使用函數(shù)調(diào)用的方式來(lái)聲明 store:
// appStore.js
import { Store } from 'kiss-vuex';
// @Store
// class AppStore {
// counter = 0;
// }
const appStore = Store({
counter: 0
});
export { appStore }
引入的話就和上述示例中一樣了。
另外,還有幾個(gè)線上實(shí)例可供參考:
額外配置
上述 @Store 這種使用方式是基于 es 中的裝飾器語(yǔ)法以及類(lèi)屬性語(yǔ)法,而目前裝飾器和類(lèi)屬性都處于草案狀態(tài),所以需要讓你的開(kāi)發(fā)環(huán)境支持這些語(yǔ)法特性,你需要做一些額外配置。
babel
如果你使用了 babel,需要安裝 @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties 兩個(gè)插件:
$ npm i -D @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties
并配置到 babel.config.js 中:
module.exports = {
plugins: [
["@babel/plugin-proposal-decorators", { legacy: true }],
["@babel/plugin-proposal-class-properties", { loose: false }]
],
presets: [
[
"@babel/env",
{
modules: false
}
]
]
};
typescript
如果你使用了 typescript,需要將 tsconfig.json 中的 compilerOptions.experimentalDecorators 這個(gè)屬性值設(shè)置為 true。
{
"compilerOptions": {
"experimentalDecorators": true
}
}
es5
如果你偏愛(ài) es5 環(huán)境,可以直接這么使用:
<body>
<script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript" src="./node_modules/vuex/dist/vuex.min.js"></script>
<script type="text/javascript" src="./node_modules/vuex/dist/kiss-vuex.min.js"></script>
<script type="text/javascript">
var appStore = KissVuex.Store({
counter: 0
});
// 添加你的其余自定義代碼
</script>
</body>
后記
使用 kiss-vuex 能夠大大減少 store 相關(guān)代碼量,并提倡“先引入后使用”這種模式,能夠很方便地進(jìn)行維護(hù)和定位問(wèn)題。有興趣的同學(xué)可以自行去 github 中查看源碼,思路也是非常巧妙的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于el-table表格組件中插槽scope.row的使用方式
這篇文章主要介紹了關(guān)于el-table表格組件中插槽scope.row的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue3 setup語(yǔ)法糖下的定時(shí)器的使用與銷(xiāo)毀
如果在組件中需要使用定時(shí)器,注意在銷(xiāo)毀組件的時(shí)候,要對(duì)定時(shí)器進(jìn)行銷(xiāo)毀,否則時(shí)間長(zhǎng)了會(huì)導(dǎo)致頁(yè)面卡頓,這篇文章給大家介紹vue3 setup語(yǔ)法糖下的定時(shí)器的使用與銷(xiāo)毀的知識(shí),感興趣的朋友一起看看吧2024-02-02
vue 地區(qū)選擇器v-distpicker的常用功能
這篇文章主要介紹了vue 地區(qū)選擇器v-distpicker的常用功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Element ui table表格內(nèi)容超出隱藏顯示省略號(hào)問(wèn)題
這篇文章主要介紹了Element ui table表格內(nèi)容超出隱藏顯示省略號(hào)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-11-11
詳解新手使用vue-router傳參時(shí)注意事項(xiàng)
這篇文章主要介紹了詳解新手使用vue-router傳參時(shí)注意事項(xiàng),詳細(xì)的介紹了幾種常見(jiàn)錯(cuò)誤,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Vue+Spring Boot簡(jiǎn)單用戶(hù)登錄(附Demo)
這篇文章主要介紹了Vue+Spring Boot簡(jiǎn)單用戶(hù)登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
vue實(shí)現(xiàn)3D切換滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)偽3D切換滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

