這篇文章主要介紹了詳解vuex的簡單使用,現在分享給大家,也給大家做個參考。
1 目錄的設定
##根據官方推薦在src目錄裡面建立store目錄2 建立store裡面的檔案
根據官方建議創建actions.js, getters.js,index.js, mutations.js, mutations-types.js, state.js2.1 state.jsstate.js: 是vuex的單一狀態數,用一個物件就包含了全部的應用層級狀態。至此它便作為一個『唯一資料來源(SSOT)』而存在。這也意味著,每個應用程式將只包含一個 store 實例。單一狀態樹讓我們能夠直接定位任一特定的狀態片段,在調試的過程中也能輕易地取得整個目前應用狀態的快照。 (用來管理所有vuex狀態資料)/* * 是vuex的单一状态数,用一个对象就包含了全部的应用层级状态 * 单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。(用来管理所有vuex状态数据) * */ const state = { // 城市状态,用来管理城市 city: {}, cityList: [], fullScreen: true, palyer: false }; export default state;2.2 mutations-types.js 存取mutations相關的字元常數(一些常數)
/* * 存取mutations相关的字符常量 * */ // 定义常量并导出 export const SET_CITY = 'SET_CITY'; export const SET_PLAY = 'SET_PLAY'; export const SET_FULL_SCREEN = 'SET_FULL_SCREEN'; export const SET_CITY_LIST = 'SET_CITY_LIST';2.3 mutations.js (定義修改的操作) 更改Vuex 的store 中的狀態的唯一方法是提交mutation。 Vuex 中的 mutations 非常類似事件:每個 mutation 都有一個字串的 事件類型 (type) 和 一個 回呼函數 (handler)。這個回呼函數就是我們實際進行狀態變更的地方,而且它會接受 state 作為第一個參數
/* * 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation * Vuex 中的 mutations 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数 */ // 导入mutation-type.js里面所有的常量 import * as types from './mutation-types'; // 定义一个mutation可以供设置和修改值 const mutations = { /* * 1 表达式作为属性表达式放在方括号之内 * 2 形参state (获取当前状态树的state) * 3 形参city,是提交mutation时传的参数 * 4 使用mutation便于书写方便 * 5 这个操作相当于往state.js里面写入city */ [types.SET_CITY](state, city) { state.city = city; }, [types.SET_CITY_LIST](state, list) { state.cityList = list; }, [types.SET_FULL_SCREEN](state, flag) { state.fullScreen = flag; }, [types.SET_PLAY](state, palyState) { state.palyer = palyState; } }; // 导出mutation export default mutations;2.4 getters.js 有時候我們需要從 store 中的 state 衍生出一些狀態。 mapGetters 輔助函數只是將store 中的getters 映射到局部計算屬性
/* * 有时候我们需要从 store 中的 state 中派生出一些状态 * 这里的常量主要是对state里面做一些映射 * mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性 */ // 对state里面的属性做一些映射 export const city = state => state.city; // 箭头函数的简写 export const cityList = state => state.cityList; export const fullScreen = state => state.fullScreen; export const palyer = state => state.palyer;2.5 actions.jsAction 類似於mutation,不同在於:
/* * actions类似mutation * 区别: * 1:action提交的是mutation * 2:action可以包含任意异步操作 */ /* * 使用: * 1:在一个动作中多次改变mutation可以封装一个action */ import * as types from './mutation-types'; export const selectList = function ({commit, state}, {list, index}) { commit(types.SET_CITY_LIST, list); commit(types.SET_PLAY, false); commit(types.SET_FULL_SCREEN, true); };
/* * 入口 */ import Vue from 'vue'; import Vuex from 'vuex'; // import * as obj from 'xxxx'; 会将xxxx中所有export导出的内容组合成一个对象返回。 import * as actions from './actions'; // 拿到getters里面的映射 import * as getters from './getter'; import state from './state'; import mutations from './mutations'; import createdLogger from 'vuex/dist/logger'; Vue.use(Vuex); const debug = process.env.NODE_ENV != 'production'; export default new Vuex.Store({ actions, getters, state, mutations, strict: debug, plugins: debug ? [createdLogger()] : [] });
#3 使用
3.1 在mian.js註冊store在main.js裡面new的Vue的實例裡面註冊store#3.2 寫入值,要在元件中引入mapMutations的語法糖引入語法糖import {mapMutations, mapActions} from 'vuex';在methods裡面mapMutations 輔助函數將元件中的methods 映射為store.commit 呼叫
...mapMutations({ // 这里和mutation里面的常量做一个映射 setCity: 'SET_CITY' })在需要的地方寫入值
this.setCity(city);3.3取得值取得vuex中的值,要在元件中引入mapGetters(mapGetters 輔助函數只是將store 中的getters 對應到局部計算屬性)引入mapGetters
import {mapGetters} from 'vuex';在computed計算屬性裡面使用物件展開運算子將getters 混入computed 物件中
computed: { // 这里面的city映射的是state.js里面的city // 可以映射多个值 ...mapGetters([ 'city', 'cityList', 'palyer', 'fullScreen' ]) }拿到值
created() { console.log(this.city); console.log(this.cityList[1]); console.log(this.palyer); console.log(this.fullScreen); }3.4 action存入值
...mapActions(['selectList'])在需要存入的地方使用
this.selectList({ list: this.citys, index: 1 });上面是我整理給大家的,希望今後會對大家有幫助。 相關文章:
以上是詳解vuex的簡單使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!