vuex 的安裝及使用


cnpm install -D vuex

vuex我想應該可以理解為是一個 全局變量

在main.js 中注入 vuex:

import Vuex from 'vuex'
Vue.use(Vuex)

如果您不打算開發大型單頁應用,使用 Vuex 可能是繁瑣冗余的。確實是如此——如果您的應用夠簡單,您最好不要使用 Vuex。一個簡單的 store 模式就足夠您所需了。但是,如果您需要構建一個中大型單頁應用,您很可能會考慮如何更好地在組件外部管理狀態,Vuex 將會成為自然而然的選擇。 -----官網介紹

在src 下創建文件夾store;創建store.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
 
export default new Vuex.Store({
  state:{
    count:0
  },
  mutations:{
    increment:state => state.count ++,
    decrement:state => state.count --,
  }
})

在 main.js 中導入:

import store from './store/store'
//實例化 store
new Vue({
  el: '#app',
  store,          //掛載
  router,
  template: '<App/>',
  components: { App }
})

vuex 核心倉庫是store(state,mutations,actions,getter,modules)。

action 提交mutation,而不是直接更改狀態

action 可以包括異步操作,mutation只能同步

modules 將store分割成模塊(modules),每個模塊擁有自己的(state,mutations,actions,getter);方便維護

store 改變狀態時通過 (commit) mutations

action 可異步操作 如加載本地json文件是異步

來自:https://www.cnblogs.com/songrimin/p/7815850.html

1, state

用來存放組件之間共享的數據。他跟組件的data選項類似,只不過data選項是用來存放組件的私有數據。

2, getters

有時候,我們需要對state的數據進行篩選,過濾。這些操作都是在組件的計算屬性進行的。如果多個組件需要用到篩選后的數據,那我們就必須到處重復寫該計算屬性函數;或者將其提取到一個公共的工具函數中,並將公共函數多處導入 - 兩者都不太理想。如果把數據篩選完在傳到計算屬性里就不用那么麻煩了,getters就是干這個的,你可以把getters看成是store的計算屬性。getters下的函數接收接收state作為第一個參數,   getters 改變不了state的值,下一個mutation是唯一可以改變state的值

3,mutation

在 Vuex store 中,實際改變 狀態(state) 的唯一方式是通過 提交(commit) 一個 mutation。mutations下的函數接收state作為參數,接收一個叫做payload(載荷)的東東作為第二個參數,這個東東是用來記錄開發者使用該函數的一些信息,比如說提交了什么,提交的東西是用來干什么的,包含多個字段,所以載荷一般是對象(其實這個東西跟git的commit很類似)

還有一點需要注意:mutations方法必須是同步方法!

4,action

既然mutations只能處理同步函數,我大js全靠‘異步回調’吃飯,怎么能沒有異步,於是actions出現了

a, Actions 提交的是 mutations,而不是直接變更狀態。也就是說,actions會通過mutations,讓mutations幫他提交數據的變更。

b, Action 可以包含任意異步操作。ajax、setTimeout、setInterval不在話下

5,module

由於使用單一狀態樹,應用的所有狀態會集中到一個比較大的對象。當應用變得非常復雜時,store 對象就有可能變得相當臃腫。為了解決以上問題,Vuex 允許我們將 store 分割成模塊(module)。每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊——從上至下進行同樣方式的分割。

友情提示:

1, this.$store.commit 來觸發之前定義好的 mutations 中的方法

2, this.$store 獲取到 store,

3, this.$store.state 來獲取狀態對象,

4,dispatch:翻譯為‘派發、派遣’的意思,觸發事件時,dispatch就會通知actions(跟commit一樣一樣的)參數跟commit也是一樣的。

5,context:context 是與 store 實例具有相同方法和屬性的對象。 可以通過context.state和context.getters 來獲取 state 和 getters。

6,new Vuex.Store({}) 表示創建一個Vuex實例,通常情況下,他需要注入到Vue實例里. Store是Vuex的一個核心方法,字面上理解為“倉庫”的意思。

來自:https://www.jianshu.com/p/cd8fdf70545e


免責聲明!

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



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