【antd组件之checkbleTag】可选择标签

https://4x.ant.design/components/tag-cn/

1. Description

可通过 CheckableTag 实现类似 Checkbox 的效果,点击切换选中效果。

该组件为完全受控组件,不支持非受控用法。

在这里插入图片描述

2. 重写样式,实现底部对勾的样式

  1. 效果

在这里插入图片描述

  1. 代码

//数据
const selectedTagsValues= [
  { label: 'nino', value: 'nino', checked: false },
  { label: 'rxl', value: 'rxl', checked: true },
  { label: 'ohno', value: 'ohno', checked: false },
  { label: 'sukura', value: 'sukura', checked: false },
];


//遍历
  const dom = useMemo(() => {
    return (
      <>
        {selectedTagsValues.map((tag: any) => {
          return (
            <div className="self-check-tag">
              <CheckableTag
                key={tag.value}
                checked={tag.checked}
                onChange={(checked) => handleChangea(tag, checked)}
              >
                <div className="cur">
                  {tag.label}
                  {tag.checked ? <i></i> : ''}
                </div>
              </CheckableTag>
            </div>
          );
        })}
      </>
    );
  }, [selectedTagsValues]);

// handelChangea,找到所点击项的索引,并把那一项的checked设置成传入的
  const handleChange = (tag: any, checked: boolean) => {
      let insertIndex = tagsData.findIndex((item: any) => {
        return tag.value == item.value;
      });

      tagsData.splice(insertIndex, 1, {
        ...tag,
        checked: checked,
        data: checked ? 1 : 0,
      });

    // :
    setTagsData([...tagsData]);
    console.log(tagsData);
  };


// 样式
.self-check-tag {
  display: inline-block;
  padding: 10px;
  min-width: 132px;
  .ant-tag {
    display: inline-block;
    background-color: white;
    border: 1px solid #cccccc;
    height: 32px;
    font-size: 14px;
    color: #666666;
    line-height: 32px;
    border-radius: 2px;
  }
  div.cur {
    position: relative;
    padding: 0 12px;
  }
  div.cur > i {
    display: block;
    position: absolute;
    border-bottom: 14px solid #1890ff;
    border-left: 16px solid transparent;
    width: 0px;
    height: 0px;
    bottom: 1px;
    right: -8px;
  }
  div.cur > i::after {
    position: absolute;
    content: '\2713';
    color: #fff;
    left: -0.66rem;
    top: -0.43rem;
    font-size: 0.1px;
    transform: scale(0.7);
  }
  .ant-tag-checkable-checked {
    color: #1890ff;
    background-color: white;
    border: 1px solid #1890ff;
  }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呐呐呐呐。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值