首頁 >web前端 >js教程 >詳解vuex的簡單使用

詳解vuex的簡單使用

亚连
亚连原創
2018-05-30 18:10:451821瀏覽

這篇文章主要介紹了詳解vuex的簡單使用,現在分享給大家,也給大家做個參考。

1 目錄的設定

##根據官方推薦在src目錄裡面建立store目錄

2 建立store裡面的檔案

根據官方建議創建actions.js, getters.js,index.js, mutations.js, mutations-types.js, state.js

2.1 state.js

state.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.js

Action 類似於mutation,不同在於:

  1. Action 提交的是mutation,而不是直接變更狀態。

  2. Action 可以包含任意非同步操作。

  3. 在一個動作中多次改變mutation可以封裝一個action

  4. #
    /*
    * 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);
    };
2.6 index.js入口

/*
* 入口
*/

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
});

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

Vue單頁應用引用單獨的樣式檔案的兩種方式

基於js中的儲存鍵值對以及注意事項介紹

angular4 共享服務在多個元件中資料通訊的範例

以上是詳解vuex的簡單使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn