uni-rate 组件需用 v-model 双向绑定 number 类型值(如 ratevalue: 0),字符串或 null 会导致不显示;支持半星需同时设 :allow-half="true" 且 v-model 为小数(如 4.5);图标需用三元素数组指定路径,列表渲染时每项须绑定独立响应式字段。

uni-app 的 uni-rate 组件怎么绑定初始值和响应点击
直接用 v-model 绑定数字即可,它不是只读展示组件——uni-rate 支持双向绑定,但必须是 Number 类型,传字符串或 null 会不显示或报 warning。
常见错误:从接口拿到的评分字段是字符串(如 "4.5"),直接赋给 v-model 导致星星不亮;或者初始化为 null 或 undefined,组件内部默认显示 0 颗星但不触发 change 事件。
- 初始化前先
Number(res.score) || 0转类型 - 确保 data 中定义的绑定变量是响应式 Number,比如:
rateValue: 0,而不是rateValue: '' - 监听评分变化用
@change,不是@input(后者在 H5 有效,但 App 和小程序平台不触发)
如何让 uni-rate 显示半星(比如 4.5 星)
必须同时满足两个条件:设置 :allow-half="true" + v-model 值为带小数的 Number(如 4.5)。只设 allow-half 但绑定整数(如 4),依然显示整星。
注意:半星在微信小程序和 App(iOS/Android)都支持,但支付宝小程序不支持半星渲染,会向下取整显示(4.5 → 4)。
-
:value="4.5"不生效,必须用v-model双向绑定 - 后端返回的 4.5 若是字符串,需转成
parseFloat(score),不能用parseInt - 如果要「只读展示不支持点击」,加
:disabled="true",此时allow-half仍起作用
自定义星星图标和大小,为什么改了没反应
uni-rate 的 icon 属性只接受数组,格式为 ['未选中图标路径', '选中图标路径', '半星图标路径'],且三个路径缺一不可。漏掉第三个(半星)会导致 allow-half 失效;路径写错或没放进 static 目录,图标就回退到默认 uni-app 字体图标。
尺寸控制用 size(单位 px),但注意:App 平台对小于 16px 的 size 渲染可能模糊,H5 下正常;小程序里建议设为 18–24 之间更稳妥。
- 图标路径必须是本地相对路径,如
['/static/icon/star-gray.png', '/static/icon/star-yellow.png', '/static/icon/star-half.png'] - 图片尺寸建议统一为 48×48px,否则在不同屏幕缩放后容易变形
- 不要用网络地址(http://)或 base64,小程序不支持
在商品评价列表里批量渲染多个 uni-rate,怎样避免互相影响
每个 uni-rate 必须绑定独立的响应式数据字段。如果全用同一个变量(比如所有项都 v-model="currentRate"),点一个就全变——这是最常踩的坑。
正确做法:遍历评论列表时,把评分值挂到每条评论对象上,例如 item.rateScore,然后 v-model="item.rateScore"。注意:直接 item.rateScore = xxx 在 Vue 2 的 uni-app 中可能不响应,需用 this.$set(item, 'rateScore', value) 初始化。
- 列表数据建议用
Array.map预处理,给每条加默认 rateScore 字段,避免渲染时取 undefined - 如果需要提交所有评分,遍历列表取
item.rateScore即可,不用额外维护索引映射 - 别在
v-for里写内联函数生成 v-model,会引发性能和响应问题
半星、禁用态、图标路径这些配置项,在列表里可以统一传,不需要每项重复写;但绑定值必须隔离。










