一、前言购物车是前端项目里非常经典的业务场景包含新增商品、单行编辑、数量增减、单选 / 全选、自动计算选中总价、单行删除等核心功能。今天我们用 Vue3 组合式 API ref reactive不引入任何 UI 组件库纯原生手写一版完整购物车代码简洁易懂非常适合练手。二、最终实现功能清单顶部输入框新增商品非空校验添加后自动清空输入框商品行展示名称、单价、数量、自动计算小计数量加减数量最小值限制为 1不能减到 0单行编辑点击编辑按钮切换文字 / 输入框直接修改名称和价格单行删除一键删除当前商品单选 顶部全选联动自动统计商品总件数、选中商品总价保留两位小数数据全部为响应式修改后页面自动刷新。四、核心知识点拆解1. 响应式数据区分ref 与 reactiveref用来定义字符串、数字、布尔等基础类型变量。在 setup 内部修改值必须写 .value模板里使用时不需要加。reactive专门用来定义对象、数组这类引用类型直接修改对象属性就能触发页面更新不需要 .value。购物车商品列表是数组所以我们用 reactive 来定义 cartList。2. 双向绑定 v-model新增商品输入框v-modelgoodsName 实现输入内容和变量双向同步。单行复选框v-modelitem.checked 绑定每条商品的选中状态。编辑模式输入框直接 v-modelitem.name修改内容会同步到数组原始数据。3. 编辑切换v-if v-else 状态控制给每一条商品增加布尔字段 isEditisEdit false展示纯文字isEdit true展示输入框点击编辑按钮直接取反布尔值item.isEdit !item.isEdit轻松实现视图切换。4. 数量控制加号直接 item.num减号增加判断保证数量不会小于 1防止出现 0 或者负数。5. 自动小计计算单行小计直接在模板运算js运行(item.price * item.num).toFixed(2)toFixed(2) 用来保留两位小数符合金额展示规范。6. 数组方法实现总价统计不用写计算属性总件数reduce 累加所有商品数量js运行cartList.reduce((sum,item)sumitem.num,0)选中商品总价先filter筛选出勾选的商品再reduce累加金额js运行cartList.filter(ii.checked).reduce((s,i)si.price*i.num,0).toFixed(2)7. 全选联动监听全选框的 change 事件遍历整个购物车数组把每一条 checked 同步成全选框的值一键控制所有商品选中状态。8. 单行删除利用数组splice(下标,1)直接删除对应下标数据Vue 会自动更新列表。五、拓展优化方向可以自己继续升级增加 “批量删除选中商品” 功能过滤掉checkedtrue的数据增加反选联动手动把所有商品取消勾选时自动取消顶部全选给价格增加非负数校验禁止输入负数把总价提取为计算属性computed让模板更简洁增加回车快速添加商品的键盘事件对新增商品做去重判断同名商品自动合并数量六、总结这个购物车案例覆盖了 Vue3 最常用的基础语法双向绑定、条件渲染、列表循环、响应式数据、事件绑定、数组遍历运算。