詳解vuex的簡(jiǎn)單使用
1 目錄的配置
根據(jù)官方推薦在src目錄里面創(chuàng)建store目錄
2 創(chuàng)建store里面的文件
根據(jù)官方推薦創(chuàng)建 actions.js, getters.js,index.js, mutations.js, mutations-types.js, state.js
2.1 state.js
state.js: 是vuex的單一狀態(tài)數(shù),用一個(gè)對(duì)象就包含了全部的應(yīng)用層級(jí)狀態(tài)。至此它便作為一個(gè)『唯一數(shù)據(jù)源(SSOT)』而存在。這也意味著,每個(gè)應(yīng)用將僅僅包含一個(gè) store 實(shí)例。單一狀態(tài)樹讓我們能夠直接地定位任一特定的狀態(tài)片段,在調(diào)試的過(guò)程中也能輕易地取得整個(gè)當(dāng)前應(yīng)用狀態(tài)的快照。(用來(lái)管理所有vuex狀態(tài)數(shù)據(jù))
/*
* 是vuex的單一狀態(tài)數(shù),用一個(gè)對(duì)象就包含了全部的應(yīng)用層級(jí)狀態(tài)
* 單一狀態(tài)樹讓我們能夠直接地定位任一特定的狀態(tài)片段,在調(diào)試的過(guò)程中也能輕易地取得整個(gè)當(dāng)前應(yīng)用狀態(tài)的快照。(用來(lái)管理所有vuex狀態(tài)數(shù)據(jù))
*
*/
const state = {
// 城市狀態(tài),用來(lái)管理城市
city: {},
cityList: [],
fullScreen: true,
palyer: false
};
export default state;
2.2 mutations-types.js 存取mutations相關(guān)的字符常量 (一些常量)
/* * 存取mutations相關(guān)的字符常量 * */ // 定義常量并導(dǎo)出 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 中的狀態(tài)的唯一方法是提交 mutation。Vuex 中的 mutations 非常類似于事件:每個(gè) mutation 都有一個(gè)字符串的 事件類型 (type) 和 一個(gè) 回調(diào)函數(shù) (handler)。這個(gè)回調(diào)函數(shù)就是我們實(shí)際進(jìn)行狀態(tài)更改的地方,并且它會(huì)接受 state 作為第一個(gè)參數(shù)
/*
* 更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation
* Vuex 中的 mutations 非常類似于事件:每個(gè) mutation 都有一個(gè)字符串的 事件類型 (type) 和 一個(gè) 回調(diào)函數(shù) (handler)。這個(gè)回調(diào)函數(shù)就是我們實(shí)際進(jìn)行狀態(tài)更改的地方,并且它會(huì)接受 state 作為第一個(gè)參數(shù)
*/
// 導(dǎo)入mutation-type.js里面所有的常量
import * as types from './mutation-types';
// 定義一個(gè)mutation可以供設(shè)置和修改值
const mutations = {
/*
* 1 表達(dá)式作為屬性表達(dá)式放在方括號(hào)之內(nèi)
* 2 形參state (獲取當(dāng)前狀態(tài)樹的state)
* 3 形參city,是提交mutation時(shí)傳的參數(shù)
* 4 使用mutation便于書寫方便
* 5 這個(gè)操作相當(dāng)于往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;
}
};
// 導(dǎo)出mutation
export default mutations;
2.4 getters.js 有時(shí)候我們需要從 store 中的 state 中派生出一些狀態(tài)。
mapGetters 輔助函數(shù)僅僅是將 store 中的 getters 映射到局部計(jì)算屬性
/* * 有時(shí)候我們需要從 store 中的 state 中派生出一些狀態(tài) * 這里的常量主要是對(duì)state里面做一些映射 * mapGetters 輔助函數(shù)僅僅是將 store 中的 getters 映射到局部計(jì)算屬性 */ // 對(duì)state里面的屬性做一些映射 export const city = state => state.city; // 箭頭函數(shù)的簡(jiǎn)寫 export const cityList = state => state.cityList; export const fullScreen = state => state.fullScreen; export const palyer = state => state.palyer;
2.5 actions.js
Action 類似于 mutation,不同在于:
- Action 提交的是 mutation,而不是直接變更狀態(tài)。
- Action 可以包含任意異步操作。
- 在一個(gè)動(dòng)作中多次改變mutation可以封裝一個(gè)action
/*
* actions類似mutation
* 區(qū)別:
* 1:action提交的是mutation
* 2:action可以包含任意異步操作
*/
/*
* 使用:
* 1:在一個(gè)動(dòng)作中多次改變mutation可以封裝一個(gè)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'; 會(huì)將xxxx中所有export導(dǎo)出的內(nèi)容組合成一個(gè)對(duì)象返回。
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注冊(cè)store
在main.js里面new的Vue的實(shí)例里面注冊(cè)store
3.2 寫入值,要在組件中引入mapMutations的語(yǔ)法糖
引入語(yǔ)法糖
import {mapMutations, mapActions} from 'vuex';
在methods里面mapMutations 輔助函數(shù)將組件中的 methods 映射為 store.commit 調(diào)用
...mapMutations({
// 這里和mutation里面的常量做一個(gè)映射
setCity: 'SET_CITY'
})
在需要的地方寫入值
this.setCity(city);
3.3獲取值
獲得vuex中的值,要在組件中引入mapGetters(mapGetters 輔助函數(shù)僅僅是將 store 中的 getters 映射到局部計(jì)算屬性)
引入mapGetters
import {mapGetters} from 'vuex';
在computed計(jì)算屬性里面使用對(duì)象展開運(yùn)算符將 getters 混入 computed 對(duì)象中
computed: {
// 這里面的city映射的是state.js里面的city
// 可以映射多個(gè)值
...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
});
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue數(shù)據(jù)傳遞--我有特殊的實(shí)現(xiàn)技巧
這篇文章主要介紹了vue數(shù)據(jù)傳遞一些特殊梳理技巧,需要的朋友可以參考下2018-03-03
vue中eslint導(dǎo)致的報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了vue中eslint導(dǎo)致的報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue3中項(xiàng)目?jī)?yōu)化方法詳解(Web?Worker的使用)
最近在做vue3的項(xiàng)目中,遇到了計(jì)算量龐大導(dǎo)致頁(yè)面響應(yīng)緩慢的問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于vue3中項(xiàng)目?jī)?yōu)化方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
解決新建一個(gè)vue項(xiàng)目過(guò)程中遇到的問(wèn)題
這篇文章主要介紹了解決新建一個(gè)vue項(xiàng)目過(guò)程中遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
element動(dòng)態(tài)路由面包屑的實(shí)現(xiàn)示例
本文主要介紹了element動(dòng)態(tài)路由面包屑的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue組件內(nèi)部實(shí)現(xiàn)一個(gè)雙向數(shù)據(jù)綁定的實(shí)例代碼
這篇文章主要介紹了Vue組件內(nèi)部實(shí)現(xiàn)一個(gè)雙向數(shù)據(jù)綁定的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Vue項(xiàng)目WebPack打包刪除注釋和console
這篇文章主要介紹了Vue項(xiàng)目WebPack打包刪除注釋和console,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

