老师能否解释一下这段代码,讲的有点快,没有弄明白

老师能否解释一下这段代码,讲的有点快,没有弄明白

红色圈出来的代码是不是意味着我们之前流程走下来productContent和shopContent实际上都没有对state.cartList做出任何实际变化。等所有流程完成,最后才需要重新把productContent和shopContent的内容传递给cartList,目的是让cartList里面的json数据可以更新一下?

https://img1.sycdn.imooc.com//climg/61556b780946cdd711141104.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,是的,前面的操作并没有对state.cartList值做修改。

这里是从state.cartList中获取值

https://img1.sycdn.imooc.com//climg/6155759409673c4906410052.jpg

如果开始state.cartList中没有店铺shopID对应的值,那么shopContent的值为undefined,判断后初始shopContent为空{} 。

然后从shopContent中获取商品productID对应的值,如果没有值,则将传入的商品信息productInfo赋值给productContent,并添加count数量为0 。然后进行数量加1的操作。

然后将商品productContent添加到店铺shopContent中,将店铺shopContent内容更新到state.cartList中,这样就存储了信息。


简单理解就是,如果一开始state.cartList中没有id对应值的话,创建一个店铺,将商品信息加入店铺中,然后再将店铺信息存储更新到state.cartList中;如果一开始state.cartList中有id对应值的话,增加count数量后,更新到state.cartList中 。

祝学习愉快!

  • PADAopanda 提问者 #1

    如果不赋值,直接写会不会更简洁?

    ​import { createStore } from "vuex";

    export default createStore({
    state: {
    cartList: {
    // 第一层级是商铺的id
    // shopId: {
    // 第二层是商品id
    // 第二层内容是商品内容以及购物数量
    // productId: {
    // _id: '1',
    // name: '番茄250g/份',
    // imgUrl: 'http://www.dell-lee.com/imgs/vue3/tomato.png',
    // sales: 10,
    // price: 33.6,
    // oldPrice: 39.6,
    // count: 2
    // },
    // },
    }
    },
    mutations: {
    addItemToCart(state, payload) {
    const { shopID, productID, productInfo } = payload;
    if (!state.cartList[shopID]) {
    state.cartList[shopID] = {};
    }
    if (!state.cartList[shopID][productID]) {
    state.cartList[shopID][productID] = productInfo;
    state.cartList[shopID][productID].count = 0;
    }
    state.cartList[shopID][productID].count += 1;
    // // 如果店铺信息不存在,则创建空对象
    // let shopContent = state.cartList[shopID];
    // if (!shopContent) {
    // shopContent = {};
    // }
    // // 如果商品信息不存在
    // // 1. productContent就等于传递过来的productInfo
    // // 2. 初始值count = 0
    // let productContent = shopContent[productID];
    // if (!productContent) {
    // productContent = productInfo;
    // productContent.count = 0;
    // }
    // productContent.count += 1;
    // // 将商品信息加入店铺中,然后再将店铺信息存储更新到state.cartList中
    // shopContent[productID] = productContent;
    // state.cartList[shopID] = shopContent;
    // // console.log(shopID, productID, productInfo);
    // // console.log(shopInfo);
    // // console.log(state.cartList);
    },
    minusItemToCart(state, payload) {
    const { shopID, productID } = payload;
    const productCount = state.cartList[shopID][productID].count;
    if (productCount) {
    state.cartList[shopID][productID].count -= 1;
    }
    }
    },
    actions: {},
    modules: {}
    });

    https://img1.sycdn.imooc.com//climg/61557c8109bebc4c14940662.jpg

    2021-09-30 17:00:07
好帮手慕星星 2021-09-30 18:03:05

同学你好,粘贴的简洁代码是可以的,效果没问题,很棒哦!不过有一个中间值可能看着更清晰一些,自己理解就好。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师