cartLinesUpdate 把数量改成 0 行项目没删掉怎么办
现象#
购物车减到 0 时调用 cartLinesUpdate(lines: [{ id, quantity: 0 }]),响应里那一行仍在,totalQuantity 变了但 lines 长度没变,偶尔还收到 userErrors 里的 INVALID。
原因#
- CartLineUpdateInput.quantity 的语义是设置数量,0 并非稳定的删除指令,不同版本表现不一致
- 删除行有专门的 cartLinesRemove,参数是行 id 而不是 merchandise id
- 传成 ProductVariant 的 GID 时,mutation 可能直接忽略该行而不报错
- 行 id 在 cartLinesAdd 之后会变化,前端缓存的旧 id 已经指向不存在的行
处理步骤#
- 在减到 0 的分支改调
cartLinesRemove(cartId:, lineIds: [lineId]) - 确认 lineId 来自
cart.lines.nodes[].id,形如gid://shopify/CartLine/... - mutation 后立刻回读
cart { totalQuantity lines(first: 50) { nodes { id quantity } } } - 对
userErrors打印 field 与 message,不要只看 HTTP 200 就认为成功 - 前端购物车状态以回读结果为准,不要本地先减再等服务端响应
验收标准#
删除后 totalQuantity 与 lines 长度同时减少,cart.cost.subtotalAmount 同步变化,再次查询该行 id 已不存在。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。