You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于用户权限数组设置Checkbox选中状态的问题排查

问题原因及修复方案

核心问题

你用userRoles.map()生成了一个布尔值数组,但checked属性需要的是单个布尔值。在JavaScript里,非空数组属于“真值”,所以所有Checkbox都会被判定为选中状态。

修复代码

把map换成some方法,它会遍历数组并返回是否存在符合条件的元素:

return (
    <>
        {listOfRights.map((item, index) => {
            // 用some判断当前权限是否在用户拥有的角色中
            const roleChecked = userRoles.some((role) => role.RoleId === item.id);
            return <Form.Check
                key={index}
                inline
                name="userRights"
                isInvalid={!!errors.user_rights}
                label={getRightsTitle(item.roleName)}
                value={item.id}
                onChange={handleChange}
                id={`user_rights-${item.id}`}
                checked={roleChecked}
            />
         })}
    </>
)

补充说明

  • some()方法会在找到第一个匹配项时就停止遍历,性能比filter()后判断长度更优
  • 如果你需要兼容旧环境,也可以用userRoles.filter(role => role.RoleId === item.id).length > 0,效果一样但效率稍低

内容的提问来源于stack exchange,提问作者udarts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:35:55