• Vuex之三连环


     

    目录

    步骤一:下载vuex

    步骤二:创建store文件夹

    初识vuex:

    深入vuex:

    配置小仓库内容:

    使用三连环:

     dispatch:

    mutations:

    getters:

    完整代码如下:


    本文对我禹哥讲解的vuex进行详细梳理与尚品汇项目中频繁使用的vuex三连环进行总结

    下面对使用步骤进行说明:

    OK熟悉的人应该知道上图这是禹哥讲的使用vuex的流程

    步骤一:下载vuex

    npm i vuex@3.6.2

    步骤二:创建store文件夹

    在src目录下创建一个store文件夹,再在store文件夹下面创建一个index.js文件。好的到了这里需要注意一点就是你如果在main.js中使用vuex的话会包下面这个错误:

     它的意思是你必须在创建store之前调用Vue.use(Vuex)这个方法。所以放在main.js中不好控制,所以直接间Vue.use(Vuex);放在store下的index.vue中使用就可以解决

    在index中建立仓库:

    初识vuex:

    1. import Vue from "vue";
    2. import Vuex from "vuex";
    3. Vue.use(Vuex);
    4. // state:仓库,存储数据的地方
    5. const state = {
    6. //state中的初始值别瞎写,需要根据接口的返回值来写
    7. };
    8. // mutation:修改数据的地方(唯一手段)
    9. const mutations = {
    10. };
    11. // actions:操作数据的地方,使用dispatch方法分发数据,可以书写自己的业务逻辑,可以处理异步
    12. const actions = {
    13. };
    14. //getters:可以理解为计算属性,用于简化仓库数据,让组件获取数据更加便捷
    15. const getters = {};
    16. //创建store实例
    17. const store =new Vuex.Store({
    18. actions,
    19. mutations,
    20. state,
    21. getters,
    22. })
    23. export default store

    之后再讲store下的index导出到main.js中,也就是在main.js中引用

    import store from '@/store'

    挂载在vue实例对象上:

    深入vuex:

    示例图如下:

     上图中store下的index.js是大仓库,里面汇总了detail、home、search三个小仓库

    配置小仓库内容:

    其实是和前面的没有什么区别,只不过写完之后你要导出去,不然大仓库如何使用呢,配置如下图,需要注意 的是我这里开了命名空间,是否需要开命名空间看自己的需求,小项目可以不用开,如果你开了命名空间那么你在使用dispatch时会有一点区别。后面讲

     然后三个小仓库就是按照这样先配置好,最后在将他们导入到大仓库中去汇总。

    1. import Vue from "vue";
    2. import Vuex from "vuex";
    3. import home from "./home";//导入三个小仓库
    4. import search from './search'
    5. import detail from './detail'
    6. Vue.use(Vuex);//在vue中使用vuex
    7. export default new Vuex.Store({//导出大仓库
    8. modules:{//在这里将小仓库汇总
    9. home:home,
    10. search:search,
    11. detail,//使用简写形式
    12. }
    13. });

    使用三连环:

    流程图:

     dispatch:

    在实例中首先使用store中的dispatch,dispatch是分发的意思是store身上的一个API,它包含开两个参数,第一个是动作也可以说是一个操作,你通过这个操作调用actions里面的一个函数。第二个就是你要传递的参数。但是在实例中使用的时候就要说到刚刚上面说到的注意事项了,因为我这里使用了命名空间,所以在dispatch时就需要加上具体的哪个小仓库名字,如果你没有开启命名空间就可以不用加。

     如果没开,命名空间就是  this.$store.dispatch('getGoodInfo',this.$route.params.skuid)

     actions:

    你使用了dispatch,那么你的actions中必须要有一个getGoodInfo方法来与之对应。其中第一个{commit} 是对commit的解构commit也是一个函数,有两个操作,第一个也是一个动作,第二个就是参数,通过commit将这次请求交给mutations

    1. async getGoodInfo({commit},skuId){
    2. let result =await reqGoodsInfo(skuId)
    3. if(result.code==200){
    4. commit('GetGOODINFO',result.data)
    5. }
    6. }

    mutations

    修改处理数据的唯一地方  

    在mutations中真正的处理数据并且渲染数据

    1. const mutations={
    2. GetGOODINFO(state,goodInfo){
    3. state.goodInfo=goodInfo
    4. }
    5. }

    getters:

    就是相当于计算属性,对state中的数据进行简化操作,就比如当你的数据很复杂时你需要简单的拿到数据。举个例子你的数据是:AAA.BBB.CCC.DDD.data,那么你就可以使用计算属性将其变为data.

    这样你简化的数据就是在getter里的skuInfo了 。使用getter里面的数据。你只需要在实例中引入

    import { mapGetters } from 'vuex'

    然后直接在计算属性中使用就好啦

    1. computed:{
    2. ...mapGetters('detail',['categoryView','skuInfo','spuSaleAttrList']),
    3. },

    这样你就可以直接使用categoryView这个变量了,当然需要注意的是这里使用了命名空间,所以要具体说明是在哪个小仓库中的数据。mapState同理

    完整代码如下:

    1. import { reqGoodsInfo } from "@/api"
    2. const state={
    3. goodInfo:{}
    4. }
    5. const mutations={
    6. GetGOODINFO(state,goodInfo){
    7. state.goodInfo=goodInfo
    8. }
    9. }
    10. const actions={
    11. //获取产品信息
    12. async getGoodInfo({commit},skuId){
    13. let result =await reqGoodsInfo(skuId)
    14. if(result.code==200){
    15. commit('GetGOODINFO',result.data)
    16. }
    17. }
    18. }
    19. const getters={
    20. //简化产品信息的数据
    21. skuInfo(state){
    22. return state.goodInfo.skuInfo||{}
    23. },
    24. //产品售卖属性 的简化
    25. spuSaleAttrList(state){
    26. return state.goodInfo.spuSaleAttrList||[]
    27. }
    28. }
    29. export default{
    30. namespaced:true,
    31. state,
    32. actions,
    33. mutations,
    34. getters
    35. }

    OK今天就分享到这,如果对你有帮助欢迎点赞收藏评论一波~~~

  • 相关阅读:
    报道 | 国内外运筹优化会议精选
    本地GPT-window平台 搭建ChatGLM3-6B
    mstsc改端口为33389
    kylin使用心得
    2. Python 判断语句、循环语句、函数
    高等数学--微分方程的求解(sympy库)
    【无标题】在feign post中,如何发送 form-url-encoded 数据
    CKA考题[k8s1.24]
    JAVA实操代码练习1
    gorm存储json
  • 原文地址:https://blog.csdn.net/qq_51580852/article/details/126376358