Vuex簡介

一罚随、什么是vuex

vuex是適用于在Vue項(xiàng)目開發(fā)時(shí)使用的狀態(tài)管理工具壤靶。

二线梗、vuex的作用

試想一下椰于,如果在一個(gè)項(xiàng)目開發(fā)中頻繁的使用組件傳參的方式來同步data中的值,一旦項(xiàng)目變得很龐大仪搔,管理和維護(hù)這些值將是相當(dāng)棘手的工作瘾婿。為此,Vue為這些被多個(gè)組件頻繁使用的值提供了一個(gè)統(tǒng)一管理的工具——VueX烤咧。在具有VueX的Vue項(xiàng)目中偏陪,我們只需要把這些值定義在VueX中,即可在整個(gè)Vue項(xiàng)目的組件中使用煮嫌。

三笛谦、vuex的安裝

1、安裝指令:

npm install vuex 或者 cnpm install vuex

2昌阿、創(chuàng)建vuex目錄
在項(xiàng)目的src文件夾內(nèi)新建一個(gè)store文件夾饥脑,在該文件夾內(nèi)再創(chuàng)建index.js
此時(shí)你的項(xiàng)目的src文件夾應(yīng)當(dāng)是這樣的


image.png

3、開始使用vuex
設(shè)置store中的index.js

import Vue from 'vue'
import Vuex from 'vuex'
import createPersist from 'vuex-localstorage'
Vue.use(Vuex)
//創(chuàng)建vuex構(gòu)造器
export default new Vuex.Store({
    state:{
        
    },
    mutations:{

    },
    plugins:[//長久儲(chǔ)存
        createPersist(
            {namespace:'namespace-for-state'}
        )
    ],
    modules:{
    }
})

設(shè)置main.js

import store from './store/index'//引入vuex
new Vue({
  el: '#app',
  store:store,
  components: { App },
  template: '<App/>'
})

四懦冰、vuex的的使用

在組件中使用Vuex

<template>
    <div id='app'>
        name:
        <h1>{{ $store.state.name }}</h1>
    </div>
</template>

或者要在組件方法中使用

methods:{
    add(){
      console.log(this.$store.state.name)
    }
},

VueX中的核心內(nèi)容
在VueX對(duì)象中灶轰,其實(shí)不止有state,還有用來操作state中數(shù)據(jù)的方法集,以及當(dāng)我們需要對(duì)state中的數(shù)據(jù)需要加工的方法集等等成員儿奶。
state 是存放狀態(tài) 和 Vue 實(shí)例中的 data遵循相同的規(guī)則
使用如下:

import Vue from 'vue'  
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state:{ //聲明數(shù)據(jù)
        str:'',
        obj:{},
        arr:[],
        num:0,
        bool:true/false
    },
})

getters 是加工state成員給外界 ,可以認(rèn)為是 store 的計(jì)算屬性框往。getter 的返回值會(huì)根據(jù)它的依賴被緩存起來,且只有當(dāng)它的依賴值發(fā)生了改變才會(huì)被重新計(jì)算闯捎。
使用方法如下:

import Vue from 'vue'  
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state:{ //聲明數(shù)據(jù)
        shopCar:[]  
    },
getters:{ //可以認(rèn)為是 store 的計(jì)算屬性
        shopCarPrices(state){
            var sum=0
            for(var i=0;i<state.shopCar.length;i++){
                sum+=state.shopCar[i]
            }
            return sum
        }
    }
})

組件中調(diào)用

this.$store.getters.shopCarPrices

mutations是對(duì) state成員操作 椰弊, Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation。
使用方法如下:

import Vue from 'vue'  
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state:{ //聲明數(shù)據(jù)
       name:'helloVueX'   
   },
mutations:{
       amend(state){
state.name = '張三'
       }
   }
})

而在組件中瓤鼻,我們需要這樣去調(diào)用這個(gè)mutation——例如在App.vue的某個(gè)method中:

this.$store.commit('amend')

使用Mutation傳值

this.$store.commit('amend',15)//傳一個(gè)值時(shí)
this.$store.commit('amend',{age:15,sex:'男'})//傳多個(gè)值時(shí)

接收掛載的參數(shù):

  amend(state,val){
    state.name = '張三'
         console.log(val) // 15或{age:15,sex:'男'}
  }

actions 是用來專門進(jìn)行異步操作秉版,最終提交mutation方法。
由于setTimeout是異步操作茬祷,所以需要使用actions

import Vue from 'vue'  
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state:{ 
       key:''
    },
mutations: {
    updateKey(state,val){
        state.key=val
        console.log(state.key);
    }
  },
actions:{
    updateKey(state,val){
        setTimeout(()=>{
            state.commit('updateKey',val)
        },10)
    }
  }
})

在組件中調(diào)用:

this.$store.dispatch('updateKey',10)

modules 模塊化狀態(tài)管理,每個(gè)模塊擁有自己的 state清焕、mutation、action祭犯、getter秸妥、甚至是嵌套子模塊——從上至下進(jìn)行同樣方式的分割。當(dāng)項(xiàng)目龐大沃粗,狀態(tài)非常多時(shí)粥惧,可以采用模塊化管理模式。
在創(chuàng)建的store文件夾中在創(chuàng)建一個(gè)user.js文件最盅。
在store中的index.js文件中引入剛創(chuàng)建好的user.js文件

import user from './user'

在index文件中寫入

 modules:{
        user
    },

創(chuàng)建好的user.js文件中寫入模塊突雪,可以寫如我們需要的核心對(duì)象起惕,語法都是一樣的
比如:

export default {
    state:{
           username :""
    },
    mutations:{
           add(state,val){
           state.username = val
        },
    },
}

組件中傳值

 this.$store.commit('add',res) 
  this.$store.commit('方法名',值) 

組件中調(diào)用

this.$store.state.user.username 
user代表的是在這個(gè)user模塊里 
username 代表的是在user這個(gè)模塊的state中有一個(gè)叫username 的變量

plugins是在vue中使用一些插件 列如可以使用vuex-localstorage
vuex-localstorage 要先進(jìn)行下載 可以使用

npm install vuex-localstorage或cnpm install vuex-localstorage

index.js中引入 vuex-localstorage

import createPersist from 'vuex-localstorage'

使用方法如下:

plugins:[
        createPersist({namespace:"namespace-for-state"})
],
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咏删,隨后出現(xiàn)的幾起案子惹想,更是在濱河造成了極大的恐慌,老刑警劉巖督函,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘀粱,死亡現(xiàn)場離奇詭異,居然都是意外死亡侨核,警方通過查閱死者的電腦和手機(jī)草穆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門灌灾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搓译,“玉大人,你說我怎么就攤上這事锋喜⌒┘海” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嘿般,是天一觀的道長段标。 經(jīng)常有香客問我,道長炉奴,這世上最難降的妖魔是什么逼庞? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮瞻赶,結(jié)果婚禮上赛糟,老公的妹妹穿的比我還像新娘。我一直安慰自己砸逊,他們只是感情好璧南,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著师逸,像睡著了一般司倚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篓像,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天动知,我揣著相機(jī)與錄音,去河邊找鬼员辩。 笑死盒粮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屈暗。 我是一名探鬼主播拆讯,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脂男,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了种呐?” 一聲冷哼從身側(cè)響起宰翅,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爽室,沒想到半個(gè)月后汁讼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阔墩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年嘿架,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啸箫。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸彪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忘苛,到底是詐尸還是另有隱情蝉娜,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布扎唾,位于F島的核電站召川,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胸遇。R本人自食惡果不足惜荧呐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纸镊。 院中可真熱鬧倍阐,春花似錦、人聲如沸薄腻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庵楷。三九已至罢艾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尽纽,已是汗流浹背咐蚯。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弄贿,地道東北人春锋。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像差凹,于是被迫代替她去往敵國和親期奔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侧馅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)呐萌,并以相應(yīng)...
    Master_Devil閱讀 186評(píng)論 0 0
  • vuex是什么馁痴? 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的 狀態(tài)管理器。 采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)肺孤,...
    Elvmx閱讀 1,705評(píng)論 4 16
  • 每一個(gè) Vuex 應(yīng)用的核心就是 store(倉庫)罗晕。“store”基本上就是一個(gè)容器赠堵,它包含著你的應(yīng)用中大部分的...
    GFI_ZT閱讀 153評(píng)論 0 0
  • 文章目錄 一小渊、Vuex概述[https://blog.csdn.net/u010358168/article/de...
    peterz博客閱讀 833評(píng)論 2 8
  • 一.VueX 1. 關(guān)于 VueX VueX是適用于在Vue項(xiàng)目開發(fā)時(shí)使用的狀態(tài)管理工具。試想一下茫叭,如果在一個(gè)項(xiàng)目...
    Kinderzhu閱讀 604評(píng)論 0 4