uni-app怎么实现类似京东的商品SKU规格选择器

星降

星降

2026-07-30

918人浏览

原创

结论:京东级sku规格选择器的核心是实时过滤——每次点击后必须用已选规格组合动态筛选skus数组并提取可用值,否则ui再炫也会导致无效组合;需预处理skus建立规格索引、用computed生成禁用状态、合并更新selectedvalues并清空后续规格,同时注意真机兼容性问题。

uni-app怎么实现类似京东的商品sku规格选择器

直接说结论:京东级 SKU 规格选择器在 uni-app 里,核心不是“做多炫的 UI”,而是“每次点击后,用已选规格组合去实时过滤 skus 数组,再提取其他维度的可用值”——漏掉这个逻辑,UI 再像也没用,用户一定点出无效组合。

为什么点完颜色后尺寸全灰了?

常见错误是把 specsskus 当成两个独立列表硬渲染。比如后端返回颜色有 [红, 白, 黑]、尺寸有 [S, M, L],但实际有效 SKU 只有 {spec_str: "红_S", stock: 10}{spec_str: "白_M", stock: 5}。如果没做动态过滤,用户点“红”之后,“M”“L”依然显示可点,但根本不存在“红_M”这个组合。

必须把 skus 预处理成可快速匹配的结构:

  • spec_str 拆解出键值对,如 "红_S"{ 颜色: "红", 尺寸: "S" }
  • 按规格名建立索引:colorMap.set("红", ["S"])sizeMap.set("S", ["红"])
  • 每次点击都调用 getAvailableValues("尺寸"),内部用 selectedValues(如 { 颜色: "红" })去查 colorMap.get("红"),返回 ["S"]

如何让 v-for 渲染的规格按钮正确禁用?

不能直接给原始 specs 数组里的对象加 disabled 字段然后 v-for 绑定——uni-app 的响应式系统不会自动追踪这种深层属性变更。

必须用 computed 生成新数组:

jQuery仿京东搜索条件筛选代码
jQuery仿京东搜索条件筛选代码

jQuery仿京东搜索条件筛选代码是一款基于json制作京东商品列表搜索条件筛选,可自定义多个条件筛选功能代码。适用于商城商品快速筛选代码。

下载
  • 每个规格项渲染时,调用 isSpecDisabled(specName, specValue)
  • 该函数遍历 skus,检查是否存在满足 当前已选 + 待判断值 的完整组合
  • 返回布尔值,绑定到 :disabled
  • 示例:<view v-for="v in colors" :key="v" :class="{ disabled: isSpecDisabled('颜色', v) }">{{v}}</view>

用户改选前面的规格,后面选项为什么不更新?

典型症状:先点“XL”,再点“绿色”,此时“红色”按钮还灰着——其实“红色_XL”是有库存的,只是状态没重算。

问题出在状态更新顺序和依赖关系上:

  • 不要分两步更新:this.selectedValues.color = "绿色" 然后 this.$nextTick(() => this.updateDisabled())——updateDisabled 拿到的是旧快照
  • 必须合并更新:this.$set(this, 'selectedValues', { ...this.selectedValues, color: "绿色" }),再立刻重新计算 disabled 映射表
  • 清空后续规格:点“颜色”后,要删掉所有排在它后面的规格键,比如 specs 顺序是 [颜色, 尺寸, 内存],点完“颜色”就得 this.$delete(this.selectedValues, "尺寸"); this.$delete(this.selectedValues, "内存")

真机上点不动、禁用失效,大概率是这几个坑

不是逻辑问题,是平台兼容性细节:

  • cursor: pointer 缺失:安卓部分机型不识别 view 的点击态,必须显式加 style="cursor: pointer"
  • Array.find 报错:低端安卓或旧版微信不支持,换成 for (let i = 0; i
  • spec_str 拼接顺序错位:后端返回的 spec_str: "S_红",但前端 specs 定义顺序是 [颜色, 尺寸],导致解析成 { 颜色: "S", 尺寸: "红" } ——必须前后端约定严格顺序
  • 没有深拷贝 selectedValues:对象引用被复用,多次点击污染状态,用 JSON.parse(JSON.stringify(this.selectedValues)) 做隔离

最易被忽略的一点:禁用逻辑不能缓存中间结果。哪怕 SKU 只有 20 条,也要每次点击都重跑过滤 —— 因为用户随时可能退回去改第一个选项,整个可用集合就变了。

相关文章

京东
京东

京东app是一款移动购物软件,具有商品搜索/浏览、评论查阅、商品购买、在线支付/货到付款、订单查询、物流跟踪、晒单/评价、返修退换货等功能,为您打造简单、快乐的生活体验。有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

京东 uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1061

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2166

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2079

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2229

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

333

5

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

543

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

10598

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

153

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习