本章節主要圍繞著手撕 Vuex,那麼在手撕之前,先來回顧一下 Vuex 的基本使用。
建立一個 Vuex 專案,我這裡採用 vue-cli 建立一個專案,然後安裝 Vuex。
vue create vuex-demo
選擇 Manually select features。
這裡只需要,Babel 與 Vuex。
選擇 2.X 版本的 Vue:
建立 package.json:
是否儲存為模板這裡我選擇不:
到這裡我們的模板專案就建立完畢了。
緊接著找到 store
資料夾下的 index.js,在檔案中匯入了 Vuex, 可以看到 Vuex 的使用非常簡單,只需要建立一個 store,然後在 Vue 的例項中注入 store,就可以在元件中使用了。
在基礎的結構當中分別有 state、mutations、actions、modules 每個屬性分別作用如下:
- state:存放狀態,可以透過 this.$store.state 訪問到。(用於儲存全域性共享資料)
- mutations:存放同步修改 state 的方法,可以透過 this.$store.commit 方法訪問到。(用於同步修改共享資料)
- actions:存放非同步修改 state 的方法,可以透過 this.$store.dispatch 方法訪問到。(用於非同步修改共享資料)
- modules:存放模組,可以透過 this.$store.state.模組名 訪問到。(使用者模組化共享資料)
在 Vuex 當中定義的資料,都是全域性共享的,所以在任何一個元件當中都可以透過 this.$store.state 訪問到,接下來先簡單的使用一下 Vuex。
在 state 當中定義一個 name,然後在元件當中使用。
App.vue:
<template>
<div id="app">
{{ this.$store.state.name }}
<HelloWorld/>
</div>
</template>
HelloWorld.vue:
<template>
<div class="hello">
{{ this.$store.state.name }}
</div>
</template>
npm run serve 啟動專案,可以看到頁面上顯示了 name 的值。
接下來就可以開始手撕 Vuex。在手撕之前我們先分析一下 Vuex 的使用過程。
在 index.js 首先是將 Vuex 匯入了進來,然後透過 Vue.use(Vuex) 將 Vuex 註冊到 Vue 的原型上,Vue.use(Vuex) 這一步其實是對 Vue 的擴充套件就是安裝了 Vuex 外掛,這就是 Vuex 的第一個特點。
Vuex 特點1
- 使用 Vuex 的時候需要用到 Vue 的 use 方法
那麼在之前的 Vue 文章介紹到 use 方法是用於註冊外掛的,所以 Vuex 的本質就是一個外掛。所以實現 Vuex 就是在實現一個全域性共享資料的外掛。
Vuex 特點2
在使用 Vuex 的時候我們會透過 Vuex.Store 建立一個倉庫,所以還需要在 Vuex 中新增 Store 屬性,這個屬性的取值是一個類。
Vuex 特點3
為了保證每個Vue例項中都能透過 this.$store
拿到倉庫, 我們還需要給每個Vue例項都動態新增一個 $store
屬性
?> 小 Tips:博主建議在繼續往下看之前,先去看看 Vue 外掛的開發,這樣會對 Vuex 的開發有更深的理解。