一、Vuex是什麼

  1. Vuex是一個大管家,多個組件共享的變量全部存儲在一個對象裡
  2. 將這個對象放在頂層vue實例中,讓其他組件使用,如下圖為多頁面

二、Vuex的五個屬性

  • state:vuex的基本數據,用來儲存變量
  • getter:從基本數據(state)派生的數據 ,相當於state的計算屬性(computed)
  • mutation:提交更新數據的方法,必須是同步,美國mutation都有一個字符串事件類型(type) 和回調函數(handler)
  • action:和mutation的功能大致相同,不同之處在於(action提交的是mutation,不是直接變更狀態;action包含任意異步操作)
  • module:模塊化vuex,可以讓每一個模塊擁有自己的state,mutation,action,getters

三、Vuex狀態管理開發

3.1  state & mutations

npm install vuex --save
//store文件夾下  新增index.jsimport Vue from 'vue'
import Vuex from 'vuex'//vuexVue.use(Vuex)const store = new Vuex.Store({//Vuex.Storestate: {//管理的状态对象counter: 1000,},mutations: {//只能包含同步的代码, 不能写异步代码increament(state) { state.counter ++;}}
})export default store//在main.js全局註冊
import Store from './components/store/index'
new Vue({el: '#app',router: router,i18n: '',Store,components: { App },template: '<App/>',})//在使用的頁面<button @click="addition">+</button>
<p>{{$store.state.counter}}</p>computed:{counter:function(){return this.$store.state.counter}},
methods:{addition(){this.$store.commit('increament')}
}

3.2 getters相當於state的計算屬性(computed)

state: {student:[{ id: 111, name: "kk", age:18 },{ id: 121, name: "kko", age:28 },{ id: 131, name: "kkoo", age:38 },{ id: 141, name: "kkpo", age:8 },]},getters: {more20Stu(state) {
//找出大於18歲的數據return state.student.filter(s => s.age >  18)},}

mutation 只能通過其他方式來更新屬性未定義的內容

//在使用的地方<p>{{$store.state.info}}</p>
<button @click="addInfo">更新用戶</button>addInfo(){this.$store.commit('upInfo')},//index.jsinfo: {id:151,name:"kkk",age:35}upInfo(state) { Vue.set(state.info,'address','los')Vue.delete(state.info,'age')}

3.3 mutation提交更新數據的方法,必須是同步,如下為異步,就無法做到響應式

increament(state) { setTimeout(()=>{state.counter++;},1000)},

3.4 actions(為了解決異步如上圖頁面顯示和數據不同步的問題,將actions   dispatch 給mutation更新)

//index.js
actions: {//異步操作aUpdateInfo(context,payload) { setTimeout(() => { context.commit('upInfo');payload.success();payload.message},1000)}}
upInfo(state) { Vue.set(state.info, 'address', 'los');}//在使用地方<button @click="updateInfo">更用戶</button>updateInfo(){this.$store.dispatch('aUpdateInfo',{message:"message",success:()=>{console.log('ok')}})},

3.5 mutation 常量類型


//index.jsmutations: {//只能包含同步的代码, 不能写异步代码increament(state) { state.counter ++;}
}//mutation-types.js 導出
export const INCREAMENT = 'increament'//使用地方引用
import {INCREAMENT} from './store/mutation-types'addition(){this.$store.commit(INCREAMENT)},

3.6 module (模塊)  vuex 允許我們將store分割成大大小小的對象,每個對象擁有自己的state,getter,action,mutation,這個對象叫module

const moduleA={state: {count:0 },getters: { fiveCount(state) {return state.count + 5}},mutations: { increment(state) {state.count++}},actions: {ifcrementRootSum({state,commit,rootState }) {if ((state.count - rootState.count) * 2 === 1) {commit('increment')}}}
}export default moduleA//使用的地方引用
import moduleA from './module/moduleA';export default new Vuex.Store({modules: {moduleA},// ...
}

Vuex是什麼 主要用來做什麼 為什麼要使用vuex相关推荐

  1. 閱讀10大優點:為什麼你應該每天閱讀

    閱讀10大優點:為什麼你應該每天閱讀 當是你最後一次讀一本書,或主要雜誌上的文章?你的日常的閱讀習慣圍繞推特,Facebook的更新或速溶燕麥片包上的指示?如果你是其中之一,無數的人誰不經常閱讀的習慣 ...

  2. 繁体字非主流伤感日志_親愛的,為什麼

    繁体字非主流伤感日志_親愛的,為什麼 - 繁体字非主流伤感日志_親愛的,為什麼 親愛的,請問,當我對妳說我愛妳的時候.妳的心裡冇我嘛?- 親愛的,請問,在妳知道我背上冇一道疤時.妳對我的關心是罘是真的 ...

  3. BRICs---看看印度工程師為什麼那麼強

    BRICs---看看印度工程師為什麼那麼強 作者:官振萱 天下雜誌 有七成人口是文盲的印度,卻是全球軟體人才的培育重鎮,貧窮的印度,憑什麼培養出全球炙手可熱的軟體工程師?怎樣的教育方式,能讓學生一出校 ...

  4. 你知道菩薩為什麼靈驗,香火不絕嗎?(主管必讀)

    我剛升上總經理職位的時候,很不習慣沒有直接指揮的單位, 也很不習慣沒有直接負責的工作,因此,沒事就召集各個郀I單位開會, 直接參與各個單位的咦鳎?輳肺揖褪遣块T主管一般. 直到有一天,一個部門主管告訴 ...

  5. 那xxx.class.getName()為什麼能這樣寫?? 看了半天都快搞不清楚到底在程式中的example到底是class ? object ? 還是instance了

    bunny wrote: 這就是為什麼 Java 需要去定義寫作規範的問題了 一般來說, Java 會建議你 Class 的名稱, 首字要大寫 而該 Class 的實體, 就是 instance 可以 ...

  6. (原創) 為什麼企業研發喜歡找研究生? (日記)

    我常常在想,大學生跟研究生有什麼差別?為什麼研發喜歡找研究生呢? 首先看看大學生怎麼唸書,大學生基本上修的課都有課本,也就是說,只要把課本念好搞懂,基本上就沒問題了,而課本都是大師整理好的東西,有範例 ...

  7. (原創) 為什麼VB有Dim obj As Foo = New Foo()這種語法? (初級) (Visual BASIC)

    Abstract 以前在寫VB/VBScript時,一直不了解為什麼VB提供兩套New語法,Dim obj As New Foo()和Dim obj As Foo = New Foo(),尤其後者,重 ...

  8. 计算机考研877难不难,計算機方向考研全都是統考嗎?為什麼有的學校專業課是877,有的是850呢?不全都是408嗎?...

    計算機方向考研全都是統考嗎?為什麼有的學校專業課是877,有的是850呢?不全都是408嗎?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

  9. 充電到 100 %時,為什麼 Vbat 只有 4.2V?

    Original. 今天有同事問說, 充電電壓不是 4.35V 嗎? 充電到 100 %時,為什麼 Vbat 只有 4.2V? 可能有三種原因. 溫度. safety 會在某個溫度區間,使用較低的電壓 ...

最新文章

  1. 喜欢把代码写一行的人_我最喜欢的代码行
  2. 15篇最新AI论文推荐新鲜出炉!真的很skr了~(附链接)
  3. pytorch crossentropy为nan
  4. mysql5.7 设置远程访问
  5. 滴滴否认柳青计划卸任:目前正积极全面配合网络安全审查
  6. 微软高层人士变动!张祺晋升为微软公司全球资深副总裁
  7. 笨方法学python第四版当当_Python编程(第四版)
  8. mongo之$group+$addToSet
  9. 抛开百度、知乎等都找不到连接不上服务器远程桌面的原因
  10. 坑爹的No matching method
  11. Context-Free Grammar及形状规则集
  12. 什么是数据不平衡问题,应该如何解决
  13. 什么是图论和图论在数字图像中的应用
  14. stm32 FPU和DSP
  15. 如何创建mysql分区表_mysql分区表创建思路
  16. PCB线路板||检查和避免PCB电路板短路的方法
  17. 激光在大气中传输特性
  18. Win 11环境下 Texlive中文字体缺失问题(Package fontspec Error: The font )
  19. ]媒体记者报道新闻,抒情是诗人的事!
  20. 钉钉、企业微信和飞书向“钱”看

热门文章

  1. 人工智能从入门到精通系列教学视频免费送
  2. PAT 1028人口普查
  3. 将指定文件压缩到指定位置
  4. FreeNAS-9.10虚拟机测试安装
  5. USB PD3.0 PPS (Programmable Power Supply)
  6. C#日期格式的转换方法
  7. [网络应用]十一期间论坛开放注册活动汇总
  8. english-phoneme
  9. 基于JavaWeb的贫困认定管理系统设计与实现
  10. Android使用Windows弹出输入法