您好,登錄后才能下訂單哦!
vuex的核心概念和基本使用是怎么樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Vuex是實現組件全局狀態(數據)管理的一種機制,可以方便的實現組件之間的數據共享
創建一個 vuex.js 文件 將https://unpkg.com/vuex
這個網址里的內容放到該文件夾里。
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>
npm install vuex --save
yarn add vuex
1.在 scr 文件里創建一個 store / index.js 的文件夾,寫入以下內容。
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: {}, mutations: {}, actions: {}, modules: {} })
2.在main.js 里引入,然后掛載到 Vue 實例里
import Vue from 'vue' import store from './store' new Vue({ render: h => h(App), store }).$mount('#app')
就是組件之間共享數據的。
只有 mutations 才能修改 store 中的數據
使用:
先定義后使用
state: { num: 0 }
方式1(推薦)
<div>{{ numAlias }}</div> import { mapState } from 'vuex' export default { //計算函數 computed: mapState({ // 傳字符串參數 'count' 等同于 `state => state.count` numAlias: 'num',//常用key是自己起的名隨便 value接收的數據 // 箭頭函數可使代碼更簡練 count: state => state.count, // 為了能夠使用 `this` 獲取局部狀態,必須使用常規函數 countPlusLocalState (state) { return state.count + this.localCount } //可以定義其余的計算函數 }), //或者這樣 //計算函數 computed: { mapState(['count']) } }
方式2
<div>{{ $store.state.count }}</div>
修改store里的數據,嚴格規定不能在其余的地方修改store的數據,mutations里不要執行異步操作。
mutation 必須同步執行,不能異步執行。
先定義方法后使用
mutations: { //increment自定義方法 store參數是store數據, parameter參數是接收到的數據,可不要 increment (state, parameter) { // 變更狀態 state.num++ } }
方式1(推薦使用)
import { mapState, mapMutations } from 'vuex' //方法 methods: { ...mapMutations([ // mutations自定義的方法名 'increment' ]), love() { // 直接this調用 this.increment('需要傳過去的數據,可不要') this.increment('Bin') } }
方式2
methods: { love() { // this.$store.commit('自定義的名稱', '傳過去的數據,可不傳') this.$store.commit('increment', 'data') } }
用于處理異步操作。
如果通過異步操作變更數據,必須通過action,而不能使用mutation,但是在action中還是要通過觸發mutation的方式間接變更數據。
Action 類似于 mutation,不同在于:
Action 提交的是 mutation,而不是直接變更數據(狀態)。
Action 可以包含任意異步操作。
mutations: { //increment自定義方法 store參數是store數據, parameter參數是接收到的數據,可不要 increment (state, parameter) { // 變更狀態 state.num++ } }, actions: { //add 自定義方法 context是參數,可以把它當作vuex的實例 add(context) { //可以通過context.commit('mutations中需要調用的方法') context.commit('increment') } }
方式1(推薦)
import { mapState, mapMutations, mapActions } from 'vuex' export default { methods: { ...mapActions([ 'add', // 將 `this.add()` 映射為 `this.$store.dispatch('add')` // `mapActions` 也支持載荷: 'add' // 將 `this.add(amount)` 映射為 `this.$store.dispatch('add', amount)` ]), ...mapActions({ add: 'add' // 將 `this.add()` 映射為 `this.$store.dispatch('increment')` }), love() { // 直接this調用 this.add('需要傳過去的數據,可不要') this.add(data) } } }
方式2
methods: { love() { // this.$store.dispatch('自定義的名稱', '傳過去的數據,可不傳') this.$store.dispatch('add', data) } }
getter用于對store中的數據進行加工處理形成新的數據。getting可以對store中已有的數據加工處理之后形成新的數據,類似Vue的計算縮寫。
state: { num: 0 }, getters: { doneTodos: state => { return state.num = 10 } }
方式1(推薦)
<div>{{ doneTodos }}</div> import { mapState, mapMutations, mapActions, mapGetters } from 'vuex' export default { //計算函數 computed: { ...mapState(['count']), ...mapmapGetters(['doneTodos']) } }
方式2
<div>{{ $store.getters.doneTodos }}</div>
看完上述內容,你們掌握vuex的核心概念和基本使用是怎么樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。