vuex

113 阅读2分钟

Vuex 是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

image.png

store中编写js文件

import {getAllData} from '@/api/api'
//存数据的地方,将此块渲染到页面上
const state = {
     stagesNum: {
        a: 0,
        b: 197,
        c: 0,
        d: 1,
        e: 5,
        }
    },
    //更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
    //Vuex 中的 mutation 非常类似于事件:
    //每个 mutation 都有一个字符串的 **事件类型 (type)**和一个**回调函数 (handler)** 
    //这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数
    //这个过程是同步的
 const mutations = {
       UPDATE_STAGES_NUM(myState, val) {
           myState.stagesNum = val
       }
    },
 //Action 通常是异步的,Action 提交的是 mutation,而不是直接变更状态。
 //Action 可以包含任意异步操作。
const actions = {
    async getAllData({ commit }) {
        const date = new Date()
        const res = await getAllData({
            year: date.getFullYear(),
        })
        commit('UPDATE_STAGES_NUM', res.phaseSum)
    }
  },
export default {
    // 开启命名空间,在文件中调用该模块时需要声明模块名
    namespaced: true,
    state,
    mutations,
    actions,
}

在 Vue 组件中获得 Vuex 状态

mapState 辅助函数

import { mapState } from 'vuex'
export default {
    data() {
        return {
            lists: [],
            forms: {},
        }
    },
    //store 中的状态是响应式的,在组件中调用 store 中的状态简单到仅需要在计算属性中返回
    //当其依赖的属性的值发生变化的时,计算属性会重新计算。反之则使用缓存中的属性值。
    computed: {
        ...mapState('home', ['stagesNum']),
    },
    //监听stagesNum的数据变化,变化调用方法
    watch: {
        stagesNum: {
            handler(value) {
                this.init()
            },
            deep: true,
        },
    },
    methods: {
        init() {
        //直接取出vuex里的数据
            this.forms = this.stagesNum
        },
        test(item) {
     //将页面携带参数传回给vuex去更新视图
   //通过disptch()方法触发actions,然后actions提交到mutations,最终实现state数据的更改 
   //涉及到接口值,提交给action
            this.$store.dispatch('home/getAllData', {
                phase: item,
            })
            //console.log('aaa')
        },
    },
}
</script>