Vuex 入門級 神作


Vuex 是什么????

 

如果用官方的話說,是以下這段:

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具 devtools extension,提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。

 

但是當我真的入門 Vuex的時候他主要難的地方是  在5個應用中不斷的使用;

五個應用分別為:State,Getter,Mutation,Action,Module 這五個應用~

 

接下來我就帶大家來一起寫一次簡單的使用方法;

首先就是得下載 Vuex;   npm i vuex -S

 

其次我們要在  vue-cli中創建好自己的項目目錄  😁

然后跟我一樣 在 src 中創建 一個主🐖目錄(容器) 起名叫 store;因為每個 Vuex 應用的核心就是 store(倉庫的意思);

 

Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那么相應的組件也會相應地得到高效更新。

 

 

然后在 store的目錄下 創建一個 store.js  用來接受之后各個應用的返回的東西~ 👍

 

 

然后把 這個 store 注冊到  main.js 中 成為  vue的屬性

 

 

 

 

 弄好了之后呢, 先別急  我們要把每個應用分別放在不同的文件夾中,所以就創建了四個應用,然后分別創建他們相對應的js文件(module放在最后再講哦,先別急

創建好了就是這個樣子啦;

 

 

 

那創建好了之后我們就開始 第一個吧~ 
因為要是想看展示狀態的話,用動態的方法最好了吧, 那就自己創建一個 vue的組件用來 學習這個東西吧!

在創建好了之后我們要實現一個東西就是:點擊按鈕讓 count的數字 加1;

 

State 的 簡介是: Vuex 使用單一狀態樹——是的,用一個對象就包含了全部的應用層級狀態。至此它便作為一個“唯一數據源 (SSOT)”而存在。這也意味着,每個應用將僅僅包含一個 store 實例。單一狀態樹讓我們能夠直接地定位任一特定的狀態片段,在調試的過程中也能輕易地取得整個當前應用狀態的快照 

 

這樣就能簡單實現了; 但是我們想到卻不是這樣的,我們要使用的是State 來看看這種效果,那就開始吧!

在 State的目錄下 找到state.js

簡單的聲明一個 變量; 然后暴露出去;在 store.js 里面接收一下~  因為 store是倉庫嘛,所以你的東西都得告訴倉庫哦

 

 這樣他就收到了  count的這個變量;

所以我們在 組件的模板中  就應該改變一些東西啦~

 

  

 

 注意看  發生的變化


 

 

因為 我們把store 注冊到了 vue的實例上,變成了屬性,所以我們 console.log( vm ) 就能看到多了一個屬性叫 store

 


就是上面這個樣子了

 

所以我們剛才的那樣的寫法就是沒問題的;應該明白了叭~

 

 這個就是State的寫法哦

 

 然后就是 第二個應用寫法  Getter   官方給的說法是 store中的 getter (可以認為是store的計算屬性),就像計算屬性一樣,getter的返回值回根據他的依賴被緩存起來,且只有當的依賴值發生了改變才會被重新計算;

 

getter 可以 接受 state 作為其第一個參數; (我用圖來解釋叭)

在  getter的js中 返回一個函數叫 doublecount 的方法;

 

在  getters的js中  傳入了 state  ( 因為 getters的第一個參數就是  state 所以這里能用到他有關的所有數據)

然后 返回了 state 中定義的 const;

 

在 vue的組件的模板中, 在方法里 讓 state中的const  ++ ; 但是上面顯示的是 getters的應用格式;

Getter 也可以接受其他 getter 作為第二個參數;  具體的用法我就不寫啦,畢竟只是一個初級入門~

 

現在該第三個啦; 叫 Mutation

更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation

 Vuex 中的 mutation 非常類似於事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。這個回調函數就是我們實際進行狀態更改的地方,並且它會接受 state 作為第一個參數

 

上圖來解釋叭~

這里 用了,mutation 的 第一個參數(state 這個東西也是必填項),跟 第二個參數是 payload ,這里的payload 是一個對象;

一定要記得每次用了新的應用都要在  store.js 中記得掛載上哦;

 

每個mutation都得用commit 來進行操作

你可以向 store.commit 傳入額外的參數,即 mutation 的 載荷(payload)

 

 payload.n 的意思是: 因為payload是一個對象,所以要用 Object.attribute的時候就這么寫啦~

 所以 這里的東西 執行后的就是;  每次讓 const + 5;

 

這里其實還能用另一種的方式來寫:有一個是傳參的方式,那另一種就是 對象的方式來進行傳值;

 

 

就是這樣子的寫法啦~

 

下面就該第四種啦~  叫做  Action ~

 

 

Action 類似於 mutation,不同在於:

  • Action 提交的是 mutation,而不是直接變更狀態。
  • Action 可以包含任意異步操作。

 

 所謂的意思就是:mutation 里面傳的是不直接變更狀態;action 可以包含任意的異步操作;

這里寫一個簡單的例子~

 

讓 在 三秒后 讓const的數字加上3;

 

記得每次用新的時候 都要 在 store.js 里面進行掛載;

 

 

 然后在 vue的組件模板中 寫入

 

這里要注意一下~   Action  用的  store.dispatch 來進行 方法觸發的;

 這么寫完的話過了三秒,他就會 自動的 加上3 咯~

 

 最后的一個應用是   Module啦

 

官方給出的解釋 是這樣的:  👇 ↓

由於使用單一狀態樹,應用的所有狀態會集中到一個比較大的對象。當應用變得非常復雜時,store 對象就有可能變得相當臃腫。

為了解決以上問題,Vuex 允許我們將 store 分割成模塊(module)。每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊——從上至下進行同樣方式的分割:

 

但是用的話,這里舉個簡單的例子叭;

要是這樣寫的話,前面的就得換一種寫法了~  我直接就上圖了嗷

 

 

 

 這里的意思是: 如果你要調用應用里面的變量的時候前都得多加一個叫 a 的對象哦;

 

因為 我們把都封存到了  modules 中 ,他們每個都是一個對象; 所以 寫法都得變一下~

 

 

 

 

 

 

 

 

那入門的介紹 也就介紹完了~   喜歡的點個關注,評論個 666; 也不枉我寫的好幾個小時呀; 謝謝啦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM