vue.js的狀態(tài)管理vuex中store的使用

一、狀態(tài)管理(vuex)簡(jiǎn)介

vuex是專(zhuān)為vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式猴誊。它采用集中存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)影涉,并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。vuex也集成刀vue的官方調(diào)試工具devtools extension喘落,提供了諸如零配置的time-travel調(diào)試茵宪、狀態(tài)快照導(dǎo)入導(dǎo)出等高級(jí)調(diào)試功能。

二瘦棋、狀態(tài)管理核心

狀態(tài)管理有5個(gè)核心稀火,分別是state、getter赌朋、mutation凰狞、action以及module。分別簡(jiǎn)單的介紹一下它們:

  • 1沛慢、state

    state為單一狀態(tài)樹(shù)服球,在state中需要定義我們所需要管理的數(shù)組、對(duì)象颠焦、字符串等等斩熊,只有在這里定義了,在vue.js的組件中才能獲取你定義的這個(gè)對(duì)象的狀態(tài)伐庭。

  • 2粉渠、getter

    getter有點(diǎn)類(lèi)似vue.js的計(jì)算屬性分冈,當(dāng)我們需要從store的state中派生出一些狀態(tài),那么我們就需要使用getter霸株,getter會(huì)接收state作為第一個(gè)參數(shù)雕沉,而且getter的返回值會(huì)根據(jù)它的依賴(lài)被緩存起來(lái),只有g(shù)etter中的依賴(lài)值(state中的某個(gè)需要派生狀態(tài)的值)發(fā)生改變的時(shí)候才會(huì)被重新計(jì)算去件。
    如果不需要緩存的話坡椒,需要寫(xiě)成方法

  • 3、mutation

    更改store中state狀態(tài)的唯一方法就是提交mutation尤溜,就很類(lèi)似事件倔叼。每個(gè)mutation都有一個(gè)字符串類(lèi)型的事件類(lèi)型和一個(gè)回調(diào)函數(shù),我們需要改變state的值就要在回調(diào)函數(shù)中改變宫莱。我們要執(zhí)行這個(gè)回調(diào)函數(shù)丈攒,那么我們需要執(zhí)行一個(gè)相應(yīng)的調(diào)用方法:store.commit。

  • 4授霸、action

    action可以提交mutation巡验,在action中可以執(zhí)行store.commit,而且action中可以有任何的異步操作碘耳。在頁(yè)面中如果我們要嗲用這個(gè)action显设,則需要執(zhí)行store.dispatch

  • 5、module

    module其實(shí)只是解決了當(dāng)state中很復(fù)雜臃腫的時(shí)候辛辨,module可以將store分割成模塊捕捂,每個(gè)模塊中擁有自己的state、mutation愉阎、action和getter。

三力奋、實(shí)例

首先建立一個(gè)vue.js項(xiàng)目榜旦,然后引入vuex

npm install vuex --save

而后建立一個(gè) store 文件夾,建立一個(gè) index.js景殷。 在index.js中引入 vuevuex 在有需要的時(shí)候可以引入 axios溅呢。

import Vue from 'vue'
import  Vuex from 'vuex'

Vue.use(Vuex)

const state  = {
    userList: [1, 2, 3, 4]
}

const  getters =  {
    getUrlParams: () => () => {
        let url = location.search; 
        let theRequest = {};
        if (url.indexOf("?") != -1) {
            var str = url.substr(1), strs;
            strs = str.split("&");
            for (var i = 0; i < strs.length; i++) {
                theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
            }
        }
        return theRequest;
    },
    getUserList: (state) => {
        //注:這里會(huì)緩存,只有執(zhí)行了 actions猿挚,這里的緩存才會(huì)更新
        return state.userList;
    }
}
const mutations = {
    setUserList(state, data){
        // 如果這里的 userList 接口返回咐旧,可以用axios請(qǐng)求
        state.userList=data;
    }
}

const actions = {
    commitUserList:({commit}, userList) => commit('setUserList',userList)
}

const store = new Vuex.Store({
    state: state,
    getters: getters,
    mutations: mutations,
    actions: actions
})

export default store;

這樣一個(gè)簡(jiǎn)單的 store 就已經(jīng)完成了。

在界面中我們要怎么使用這個(gè)建立的狀態(tài)管理呢:

  • 首先在main.js 引入 store:
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'

//實(shí)例化 vue 
new Vue({
    el: '#app',
    store,
    router,
    components: { App },
    template: '<App/>'
})
  • 然后在 components 目錄 新建組件 index.vue, 組件里面就可以如下寫(xiě):
<template>
    <ul>
        <li v-for="(user, index) in userList">{{index}} --- {{user}}</li>
    </ul>
    <div @click="updateUserList()">更新用戶(hù)列表</div>
</template>
<script>
export default {
    name: "index",
    data() {
        return{
            userList: this.$store.getters.getUserList;//引入state中的對(duì)象
        }
    },
    methods:{
        updateUserList () {
            var item=['a':'b','c':'d'];
            this.$store.dispatch('setUserList', item);
        }
    }
}
</script>
  • router 里面設(shè)置訪問(wèn)地址
import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router);


export default new Router({
    mode: 'history', //目前使用 history 模式
    routes: [
        {
            path: '/',
            name: 'index',
            component:  resolve => require.ensure([], () => resolve(require('@/components/index.vue')), 'index')
        }
    ]
})


相關(guān)文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铣墨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子办绝,更是在濱河造成了極大的恐慌伊约,老刑警劉巖姚淆,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屡律,居然都是意外死亡腌逢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)超埋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搏讶,“玉大人,你說(shuō)我怎么就攤上這事霍殴∶教瑁” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵繁成,是天一觀的道長(zhǎng)吓笙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)巾腕,這世上最難降的妖魔是什么面睛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮尊搬,結(jié)果婚禮上叁鉴,老公的妹妹穿的比我還像新娘。我一直安慰自己佛寿,他們只是感情好幌墓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冀泻,像睡著了一般常侣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弹渔,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天胳施,我揣著相機(jī)與錄音,去河邊找鬼肢专。 笑死舞肆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的博杖。 我是一名探鬼主播椿胯,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剃根!你這毒婦竟也來(lái)了哩盲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎种冬,沒(méi)想到半個(gè)月后镣丑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娱两,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年莺匠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片十兢。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趣竣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旱物,到底是詐尸還是另有隱情遥缕,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布宵呛,位于F島的核電站单匣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宝穗。R本人自食惡果不足惜户秤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逮矛。 院中可真熱鬧鸡号,春花似錦、人聲如沸须鼎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晋控。三九已至汞窗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赡译,已是汗流浹背仲吏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捶朵,地道東北人蜘矢。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓狂男,卻偏偏與公主長(zhǎng)得像综看,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岖食,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中红碑,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 2,938評(píng)論 0 7
  • Vuex是什么? Vuex 是一個(gè)專(zhuān)為 Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,118評(píng)論 0 6
  • Vuex 是什么析珊? Vuex 是一個(gè)專(zhuān)為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式羡鸥。它采用集中式存儲(chǔ)管理應(yīng)用的所有...
    skycolor閱讀 837評(píng)論 0 1
  • 目錄 - 1.什么是vuex? - 2.為什么要使用Vuex? - 3.vuex的核心概念?||如何在組件中去使用...
    我跟你蔣閱讀 4,110評(píng)論 4 51
  • 系列文章:Vue 2.0 升(cai)級(jí)(keng)之旅Vuex — The core of Vue applic...
    6ed7563919d4閱讀 4,549評(píng)論 2 58