Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具 devtools extension,提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、網站空間、營銷軟件、網站建設、歷城網站維護、網站推廣。
以上是vuex的官方文檔對vuex的介紹,官方文檔對vuex的用法進行了詳細的說明。這里就不再細講vuex的各個用法,寫這篇博客的目的只是幫助部分同學更快地理解并上手vuex。
1. 安裝
$ npm install vuex --save
2. 在main.js 主入口js里面引用store.js
import Vue from 'vue' import App from './App' import router from './router' import store from './vuex/store' //引用store.js Vue.config.productionTip = false //阻止在啟動時生成生產提示 //vue實例 new Vue({ el: '#app', router, store, //把store掛在到vue的實例下面 template: '<App/>', components: { App } })
3. 在store.js里引用Vuex
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) //注冊Vuex // 定義常量 如果訪問他的話,就叫訪問狀態對象 const state = { count: 1 } // mutations用來改變store狀態, 如果訪問他的話,就叫訪問觸發狀態 const mutations = { //這里面的方法是用 this.$store.commit('jia') 來觸發 jia(state){ state.count ++ }, jian(state){ state.count -- }, } //暴露到外面,讓其他地方的引用 export default new Vuex.Store({ state, mutations })
4. 在vue組件中使用
使用$store.commit('jia')區觸發mutations下面的加減方法
<template> <div class="hello"> <h2>Hello Vuex</h2> <h6>{{$store.state.count}}</h6> <p> <button @click="$store.commit('jia')">+</button> <button @click="$store.commit('jian')">-</button> </p> </div> </template> <!-- 加上scoped是css只在這個組件里面生效,為了不影響全局樣式 --> <style scoped> h6{ font-size: 20px; color: red; } </style>
5. 查看演示
6. state訪問狀態對象
使用computed計算
<template> <div class="hello"> <h2>Hello Vuex</h2> <h6>{{count}}</h6> <p> <button @click="$store.commit('jia')">+</button> <button @click="$store.commit('jian')">-</button> </p> </div> </template> <script> import {mapState} from 'vuex' export default{ name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實用 // 方法一 // computed: { // count(){ // return this.$store.state.count + 6 // } // } // 方法二 需要引入外部 mapState computed:mapState({ count:state => state.count + 10 }) // ECMA5用法 // computed:mapState({ // count:function(state){ // return state.count // } // }) //方法三 // computed: mapState([ // 'count' // ]) } </script>
7. mutations觸發狀態 (同步狀態)
<template> <div class="hello"> <h2>Hello Vuex</h2> <h6>{{count}}</h6> <p> <button @click="jia">+</button> <button @click="jian">-</button> </p> </div> </template> <script> import {mapState,mapMutations} from 'vuex' export default{ name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實用 //方法三 computed: mapState([ 'count' ]), methods:{ ...mapMutations([ 'jia', 'jian' ]) } } </script>
8. getters計算屬性
getter不能使用箭頭函數,會改變this的指向
在store.js添加getters
// 計算 const getters = { count(state){ return state.count + 66 } } export default new Vuex.Store({ state, mutations, getters }) //count的參數就是上面定義的state對象 //getters中定義的方法名稱和組件中使用的時候一定是一致的,定義的是count方法,使用的時候也用count,保持一致。 組件中使用 <script> import {mapState,mapMutations,mapGetters} from 'vuex' export default{ name:'hello', computed: { ...mapState([ 'count' ]), ...mapGetters([ 'count' ]) }, methods:{ ...mapMutations([ 'jia', 'jian' ]) } } </script>
9. actions (異步狀態)
在store.js添加actions
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 定義常量 const state = { count: 1 } // mutations用來改變store狀態 同步狀態 const mutations = { jia(state){ state.count ++ }, jian(state){ state.count -- }, } // 計算屬性 const getters = { count(state){ return state.count + 66 } } // 異步狀態 const actions = { jiaplus(context){ context.commit('jia') //調用mutations下面的方法 setTimeout(()=>{ context.commit('jian') },2000) alert('我先被執行了,然后兩秒后調用jian的方法') }, jianplus(context){ context.commit('jian') } } export default new Vuex.Store({ state, mutations, getters, actions })
在組件中使用
<template> <div class="hello"> <h2>Hello Vuex</h2> <h6>{{count}}</h6> <p> <button @click="jia">+</button> <button @click="jian">-</button> </p> <p> <button @click="jiaplus">+plus</button> <button @click="jianplus">-plus</button> </p> </div> </template> <script> import {mapState,mapMutations,mapGetters,mapActions} from 'vuex' export default{ name:'hello', computed: { ...mapState([ 'count' ]), ...mapGetters([ 'count' ]) }, methods:{ // 這里是數組的方式觸發方法 ...mapMutations([ 'jia', 'jian' ]), // 換一中方式觸發方法 用對象的方式 ...mapActions({ jiaplus: 'jiaplus', jianplus: 'jianplus' }) } } </script> <style scoped> h6{ font-size: 20px; color: red; } </style>
10. modules 模塊
適用于非常大的項目,且狀態很多的情況下使用,便于管理
修改store.js
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { count: 1 } const mutations = { jia(state){ state.count ++ }, jian(state){ state.count -- }, } const getters = { count(state){ return state.count + 66 } } const actions = { jiaplus(context){ context.commit('jia') //調用mutations下面的方法 setTimeout(()=>{ context.commit('jian') },2000) alert('我先被執行了,然后兩秒后調用jian的方法') }, jianplus(context){ context.commit('jian') } } //module使用模塊組的方式 moduleA const moduleA = { state, mutations, getters, actions } // 模塊B moduleB const moduleB = { state: { count:108 } } export default new Vuex.Store({ modules: { a: moduleA, b: moduleB, } })
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。
網頁名稱:淺談Vuex的狀態管理(全家桶)
文章起源:http://m.newbst.com/article18/gcepgp.html
成都網站建設公司_創新互聯,為您提供網站改版、虛擬主機、網站營銷、定制網站、用戶體驗、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯