淺談Vuex

一.vuex簡介

VueX是適用于在Vue項(xiàng)目開發(fā)時(shí)使用的狀態(tài)管理工具。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。

二.開發(fā)中遇到的問題

項(xiàng)目中組件傳參的方式 潮太,來同步data的值,確實(shí)很方便。如果業(yè)務(wù)變得的越來越復(fù)雜铡买,項(xiàng)目會(huì)逐漸變大更鲁,組件的管理和代碼的維護(hù) 工作量 的問題,變得很頭疼奇钞。面對(duì)此問題岁经,Vuex 的使用會(huì)將此問題變的越來越輕松。

三.vuex的原理圖

image.png

四.安裝

1.安裝vuex
npm install vuex --save
2.使用
  • 在項(xiàng)目根目錄下的src文件夾中新建store文件夾蛇券,同時(shí)新建index.js文件,編寫index.js文件如下
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({})
export default store;
  • 在src文件夾中的main.js文件中進(jìn)行修改如下(引入store下的index.js文件樊拓,并且將store綁定到全局)
import animate from 'animate.css'
import Vue from 'vue'
import App from './App.vue'
import store from "./store/index"
Vue.config.productionTip = false
Vue.prototype.bus = new Vue();
new Vue({
  store,
  render: h => h(App),
}).$mount('#app')
Vue.use(animate);

五.Vuex中有五種基本對(duì)象

  • 1.state 存儲(chǔ)數(shù)據(jù)

存儲(chǔ)數(shù)據(jù)和組件的data類似纠亚,只不過data是用來存放組件的私有數(shù)據(jù),state用來存放組件之間共享的數(shù)據(jù).

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const state = {  // 設(shè)置全局訪問的state對(duì)象筋夏,記得設(shè)置初始值
    tableHead: [],
    tableList: [],
}

計(jì)算屬性會(huì)監(jiān)控?cái)?shù)據(jù)變化蒂胞,一旦發(fā)生改變就會(huì)響應(yīng),所以我們會(huì)在組件的computed中獲取state的數(shù)據(jù)

computed: {
    tableHead() {
        return this.$store.state.tableHead
    }
}
  • 2.mapstate輔助函數(shù)

一個(gè)組件需要獲取多種狀態(tài)時(shí)条篷,將這些狀態(tài)都聲明會(huì)顯得很重復(fù)骗随,這時(shí)候安利大家使用mapstate輔助函數(shù)生成計(jì)算屬性,記得import { mapState } from "vuex"

computed: {
      ...mapState({
        tableHead: state => state.demo.tableHead, 
        tableList: state => state.demo.tableList
      }), 
}
  • 3.getters

當(dāng)我們需要對(duì)state的數(shù)據(jù)進(jìn)行篩選時(shí)可以用到它,可以理解為state的計(jì)算屬性赴叹。一般不常用

  • 4.mutations 更改狀態(tài)鸿染,mutation必須是同步函數(shù)

在Vuex中,改變狀態(tài)(state) 的唯一方式是通過提交(commit) 一個(gè)mutation乞巧。mutations下的函數(shù)接收state作為第一個(gè)參數(shù)涨椒,接收payload(載荷)作為第二個(gè)參數(shù),載荷是用來記錄開發(fā)者提交了什么绽媒。

mutations: {
    updateTableHead( state, obj ) {  // 自定義改變state初始值的方法蚕冬,可以傳第二個(gè)參數(shù)(變量或?qū)ο螅?      state.tableHead = obj;
    },
    updateTableList( state, obj ) {
      state.tableList = obj
    },
}

你可以在組件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 輔助函數(shù)將組件中的 methods 映射為 store.commit 調(diào)用

import { mapMutations } from 'vuex'
export default {
    methods: {
        ...mapMutations([
          'XXX' 
        ])
    }
}
  • 5.actions 異步操作

Actions 提交的是 mutations是辕,而不是直接變更狀態(tài)囤热。也就是說,actions會(huì)讓mutations幫他提交數(shù)據(jù)的變更

getTableHeadList({commit}) {
     return demo.getTableHead(). then( res =>     // 調(diào)用了接口
          commit('updateTableHead',res.data.Model.headList))//{commit}運(yùn)用了參數(shù)解構(gòu)來簡化代碼
}

分發(fā)Action是通過store.dispatch觸發(fā)的

store.dispatch('tableHead')

mutations和actions區(qū)別:
mutations:同步

mutations: {
    increment ( state, n ) {
        state.count += n
    }
}
store.commit( 'increment',10)

actions:異步

actions: {
    updateCount ( store, data ) {
        setTimeout(() => {
            store.commit( 'updateCount', data.num )
        }, data.time)
    }
}

this.$store.dispatch( 'updataCount', {
    num: 5,
    time: 2000
})

moudles:由于使用單一狀態(tài)樹获三,應(yīng)用的所有狀態(tài)會(huì)集中到一起旁蔼。當(dāng)應(yīng)用變得非常復(fù)雜時(shí),store 的代碼就有可能變得非常臃腫石窑。為了解決以上問題牌芋,我們可以將 store 分割成模塊(module)。每個(gè)模塊擁有自己的 state松逊、mutation躺屁、action、getter经宏、甚至是嵌套子模塊——從上至下進(jìn)行同樣方式的分割

參考資料->點(diǎn)擊跳轉(zhuǎn)

我是喬喬犀暑,關(guān)注我 一起學(xué)前端

我是喬喬驯击,關(guān)注我 一起學(xué)前端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耐亏,隨后出現(xiàn)的幾起案子徊都,更是在濱河造成了極大的恐慌,老刑警劉巖广辰,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暇矫,死亡現(xiàn)場離奇詭異,居然都是意外死亡择吊,警方通過查閱死者的電腦和手機(jī)李根,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來几睛,“玉大人房轿,你說我怎么就攤上這事∷” “怎么了囱持?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焕济。 經(jīng)常有香客問我纷妆,道長,這世上最難降的妖魔是什么吼蚁? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任凭需,我火速辦了婚禮,結(jié)果婚禮上肝匆,老公的妹妹穿的比我還像新娘粒蜈。我一直安慰自己,他們只是感情好旗国,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布枯怖。 她就那樣靜靜地躺著,像睡著了一般能曾。 火紅的嫁衣襯著肌膚如雪度硝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天寿冕,我揣著相機(jī)與錄音蕊程,去河邊找鬼。 笑死驼唱,一個(gè)胖子當(dāng)著我的面吹牛藻茂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼辨赐,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼优俘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掀序,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤帆焕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后不恭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叶雹,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年换吧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浑娜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡式散,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出打颤,到底是詐尸還是另有隱情暴拄,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布编饺,位于F島的核電站乖篷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏透且。R本人自食惡果不足惜撕蔼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秽誊。 院中可真熱鬧鲸沮,春花似錦、人聲如沸锅论。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽最易。三九已至怒坯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藻懒,已是汗流浹背剔猿。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嬉荆,地道東北人归敬。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親弄慰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子第美,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 一陆爽,什么是vuex 官方說法:Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式什往。它采用集中式存儲(chǔ)管理應(yīng)...
    是歸人不是過客閱讀 810評(píng)論 0 5
  • 前言 我們知道Vue組件通訊基本的方式有 子傳父,父傳子,平行兄弟組件通信慌闭,那么在簡單的應(yīng)用當(dāng)中,Vue Stor...
    Echonessy閱讀 384評(píng)論 0 1
  • 1.安裝Vuex npm install vuex --save (簡略版: npm i vuex -S) 2...
    G_弦上的詠嘆調(diào)閱讀 338評(píng)論 0 7
  • 什么是Vuex驴剔? 首先Vuex 是Vue '全家桶'的成員之一省古,也是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模...
    隨筆記呀閱讀 197評(píng)論 0 1
  • 通過購物車的一個(gè)案列,把vuex學(xué)習(xí)了一篇丧失。 vuex概念淺談 Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的...
    藍(lán)茫閱讀 447評(píng)論 0 8