Vue2 - 关于 vuex 的运用

一般在项目中全局组件或大组件的数据,或者需要从服务器获取的数据都储存在 vuex

vuex 中的 action 主要用来发送请求,不在组件中发送了!

而且vuex需要模块化。

工作模式(三连环): api 编写发送请求函数 -> vuex 调用请求函数并存储数据 -> 组件利用 vuex 发送请求获取数据

组件中使用 vuex

1、读取数据

import { mapState, mapGetters } from 'vuex'

computed: {
    ...mapState('home',['navList']),
    ...mapGetters('detail',['spuSaleAttrList','skuInfo','categoryView'])
},

监视 vuex 数据

watch: {
    navList(newValue) {
        .
    }
}

2、修改 vuex 数据

必须通过调用 dispatch 或者 commit

this.$store.commit('user/upDataCountdown');

调用 dispatch

this.$store.dispatch('home/updataNavList');
vuex工作模式

案例:home 组件中的 nav 组件展示时自动更新数组 navList

1、新建 src/store 文件夹 新建 index.js

//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)

// 引入仓库
import home from './home'

//创建并暴露store
export default new Vuex.Store({
	modules: {
        home,
	}
})

2、nav组件:获取 vuex 中的 navList 和 申请更新 navList

import {mapState} from 'vuex'

export default {
    name: 'TypeNav',

    computed: {
        ...mapState('home',['navList']),
    },

    mounted() {
        // 更新 vuex/home 里的 navList
        this.$store.dispatch('home/updataNavList');
    },
}

3、配置 home.js

(一)在 actons 向服务器发送请求

  • 调用请求函数(提前在 api 里面写好)获取到 promise 对象,
  • 通过异步函数处理 promise 对象(使用 async/await 获取具体的值)

(二)通过 context.commit 近一步申请更新 NavList

(三)在 mutations 中直接更新

// home仓库

// 引入axios请求函数
import { reqgetCategoryList } from '@/api'

export default {
	namespaced: true,

    actions: {
        async updataNavList(context) {
            let result = await reqgetCategoryList();

            if(result.code == 200) {
                context.commit('updataNavList',result.data)
            }
        }
    },

    mutations: {
        updataNavList(state,value) {
            state.navList = value;
        }
    },

    state: {
        navList: {},
        goodData: {},
    },

    // 一般通过 getter 简化 state 中复杂对象的数据(
    getters: {
        categoryView(state) {
            return state.goodData.categoryView || {};
        },

        skuInfo(state) {
            return state.goodData.skuInfo || {};
        },       
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cocoonne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值