vuex状态管理

在 Vuex 中,store 文件夹通常是用来存放与 Vuex 相关的模块和文件的。以下是 actions.jsgetters.jsindex.jsmutations.js 和 state.js 文件之间的关系和作用的解释:

state.js

  •  state.js 文件定义了 Vuex 中的状态(state)。状态是存储在 Vuex 中的数据。在此文件中,你可以声明并初始化 Vuex 的状态对象。这些状态对象可以在整个应用程序中共享和访问。



export default function(){
    return{
        allPermission:[],
        count: 0
    }
}

这段代码导出了一个工厂函数,且该工厂函数返回一个包含两个属性的对象。让我们逐个解析这些属性:

  1. allPermission: [] - 这是一个名为 allPermission 的数组属性,它被初始化为空数组。

  2. count: 0 - 这是一个名为 count 的数值属性,它被初始化为 0。

综上所述,这段代码的作用是创建一个初始状态对象,其中包含了一个空的权限数组 allPermission 和一个计数属性 count,以供 Vuex 在应用程序中使用。当应用程序启动时,这些属性将作为状态数据存储在 Vuex 中,并可以在整个应用的各个组件中进行访问和修改。

mutations.js

  •  mutations.js 文件定义了 Vuex 中的变更(mutations)。变更是修改状态的操作。在此文件中,你可以编写更改状态的方法,这些方法被称为变更函数。变更函数接受状态作为参数,并用于更改状态。变更函数是同步的,因此它们应该只包含简单的状态更新操作。

export default {
    shareMenu(state, data) {
        state.allPermission = data;
    },
    increment(state, data) {
        state.count = data;
    }
}

这段代码导出了一个对象,其中包含了两个使用于 Vuex 的变更函数:

  1. shareMenu(state, data) - 这是一个名为 shareMenu 的变更函数。它接受两个参数: state 和 datastate 是 Vuex 的状态对象,data 是要更新 state.allPermission 的新值。这个变更函数的作用是将 state.allPermission 更新为 data ,从而实现对权限数组的共享。

  2. increment(state, data) - 这是一个名为 increment 的变更函数。它接受两个参数: state 和 datastate 是 Vuex 的状态对象,data 是要更新 state.count 的新值。这个变更函数的作用是将 state.count 更新为 data ,从而实现对计数属性的增加。

这些变更函数可以在组件中通过调用 commit 方法来触发执行,从而实现对状态的修改。例如,this.$store.commit('shareMenu', newData) 将会触发 shareMenu 变更函数,并将 newData 作为参数传递给它。在变更函数中,state 对象会被更新,从而在应用程序中实现状态的变化。

actions.js

  •  actions.js 文件定义了 Vuex 中的动作(actions)。动作是执行异步操作的方法。在此文件中,你可以编写向后端发送请求、处理数据、调用多个变更函数等异步操作的方法。动作函数接受 Vuex 的上下文对象作为参数,上下文对象包含了可以访问和使用状态和变更函数的方法。

export default {
    shareMenu(type, data) {
        // 如果获取数据的方式是异步方式,那么官方建议使用dispatch调用action里的方法
        // action中再次通过commit调用mutations里面的方法
        type.commit('shareMenu', data);
        type.state.count
    },
    increment({state, commit}, data) {
        data = state.count + data
        commit('increment', data)
    }
}

这段代码导出了一个对象,其中包含了两个用于 Vuex 的动作函数:

  1. shareMenu(type, data) - 这是一个名为 shareMenu 的动作函数。它接受两个参数: type 和 datatype 是 Vuex 的上下文对象,包含了一些方法和属性,比如 commit 方法和 state 属性。data 是要传递给 commit 方法的数据。在这个动作函数中,它会通过调用 commit 方法,将数据 data 传递给 commit 方法的第二个参数。这将触发相应的变更函数 shareMenu 来更新 state 对象中的 allPermission 属性。然后,通过 type.state.count 可以访问 state 对象中的 count 属性。

  2. increment({state, commit}, data) - 这是一个名为 increment 的动作函数。它接受两个参数: {state, commit} 和 data{state, commit} 是 Vuex 的上下文对象,通过解构赋值的方式将其中的 state 属性和 commit 方法提取出来。data 是用于更新计数属性的值。在这个动作函数中,它通过将 state.count 和 data 相加得到新的值,并将新的值传递给 commit 方法来触发变更函数 increment 来更新 state 对象中的 count 属性。

这些动作函数可以在组件中通过调用 dispatch 方法来触发执行,从而实现对状态的修改。例如,this.$store.dispatch('shareMenu', newData) 将会触发 shareMenu 动作函数,并将 newData 作为参数传递给它。在动作函数中,可以通过上下文对象 type 或者解构赋值的方式来访问 state 对象和 commit 方法,并进行相应的操作。

getters.js

  •  getters.js 文件定义了 Vuex 中的获取器(getters)。获取器用于从状态中派生出新的数据。你可以将它们视为计算属性,它们会根据一些状态的变化而动态地计算新的值。你可以使用获取器来获取和返回处理后的状态数据,供组件使用。

export default {
    getPermission(state) {
        //  原样返回数据
        return state.allPermission;
    },
    getCount(state) {
        return state.count;
    }
}

这段代码导出了一个对象,其中包含了两个用于 Vuex 的 getters 函数:

  1. getPermission(state) - 这是一个名为 getPermission 的 getters 函数。它接受一个参数: state,代表 Vuex 的状态对象。在这个 getters 函数中,它返回 state.allPermission,即权限数组的值。通过在组件中使用 $store.getters.getPermission,可以获取到状态中的 allPermission 属性的值。

  2. getCount(state) - 这是一个名为 getCount 的 getters 函数。它也接受一个参数: state。在这个 getters 函数中,它返回 state.count,即计数属性的值。通过在组件中使用 $store.getters.getCount,可以获取到状态中的 count 属性的值。

Getters 函数允许从状态中派生或计算一些新的属性。这些属性可以在组件中像普通属性一样访问,并且会自动更新,当状态中的相应值发生变化时。例如,如果 state.allPermission 的值发生了变化,那么相关联的组件中使用 $store.getters.getPermission 获取的值也会相应地更新。

index.js

  •  index.js 文件是将上述文件整合在一起的入口文件。在此文件中,你可以使用 Vuex.Store 方法创建 Vuex 的实例,并将状态、变更、动作和获取器导入到该实例中。此文件的目的是组织和导出 Vuex 模块的内容,以便在项目中正确使用 Vuex。

import Vue from "vue";
import Vuex from 'vuex'
import state from "@/store/state";
import mutations from "@/store/mutations";
import getters from "@/store/getters";
import actions from "@/store/actions";

Vue.use(Vuex)

export default new Vuex.Store({
    state,
    mutations,
    getters,
    actions
});

这段代码是一个典型的 Vuex 的主配置文件,它完成以下操作:

  1. 引入 Vue 和 Vuex,并将其注册为 Vue 插件,以便在组件中使用 Vuex。

  2. 引入了四个模块化的文件:statemutationsgettersactions。这些文件分别定义了 Vuex 的状态对象、变更函数、获取函数和动作函数。

  3. 使用 new Vuex.Store() 创建了一个 Vuex 的实例,并将之前导入的模块作为配置项传递给该实例。这样就将各个模块中定义的状态、变更函数、获取函数和动作函数组合成了一个完整的 Vuex 应用。

  4. 最后,通过 export default 将这个创建好的 Vuex 实例导出,以便在 Vue 应用的入口文件中使用。这样,所有使用 Vuex 管理的状态和操作都可以在应用的任何组件中使用,通过 this.$store 来访问 Vuex 中的属性和方法。

这种模块化的组织方式使得 Vuex 的配置更加清晰和可维护,将各个功能模块分开,使代码结构更加简洁和可读。

总结

这些文件之间的关系如下:state.js 定义了状态对象mutations.js 提供了更改状态的方法actions.js 提供了在异步环境中调用变更函数的方法getters.js 提供了派生的状态数据,而 index.js 则是将这些文件整合在一起创建 Vuex 实例的入口文件。

总的来说,这些文件一起为 Vuex 提供了存储状态、更改状态、处理异步操作和派生数据的功能,使得在 Vue 应用中进行状态管理变得更加简单和可维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值