react标签单选组件

使用react 实现标签单选

import { styled,css } from 'styled-components';
import { Flex } from 'antd';
import React, { memo, useState } from 'react';

const TagWrap = styled.div`
  margin-top: 16px;
`;
const CheckedCss = css`
  background: #edf5ff;
  border-radius: 6px;
  color: rgba(0, 10, 26, 0.89);
`;

const Tag = styled.div<{ $checked?: boolean }>`
  max-width: 90px;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 12px;
  color: #616c77;
  line-height: 16px;
  padding: 4px 8px;
  white-space: nowrap;
  cursor: pointer;
  margin-right: 8px;
  ${({ $checked }) => $checked && CheckedCss}
`;

interface propsType {
  value: any;
  mode?: 'multiple' | 'single';
  onChange?: (value: any) => void;
  dataSource?: any;
}

export const TagSelect = memo((props: propsType) => {
  const { value, onChange, mode = 'single', dataSource } = props;
  const [selectedTag, setSelectedTag] = useState<any>(value);

  const handleChange = (value: any) => {
    if (mode === 'multiple') {
      const isChecked = selectedTag?.map((i: any) => i.key).includes(value.key);
      const nextSelectedTags = isChecked
        ? selectedTag.filter((t: any) => t.key !== value.key)
        : [...selectedTag, value];
      setSelectedTag(nextSelectedTags);
      onChange?.(nextSelectedTags);
    } else {
      // 禁止反选
      if (value?.key === selectedTag) return false;
      const val = selectedTag === value?.key ? undefined : value?.key;
      setSelectedTag(val);
      onChange?.(val);
    }
  };

  const checked = (key: any) => {
    if (mode === 'multiple') {
      return selectedTag?.map((i: any) => i.key).includes(key);
    }
    return selectedTag === key;
  };

  return (
    <TagWrap>
      <Flex gap="8px 0" wrap="wrap" align="center">
        {dataSource && dataSource.map((item: any) => {
          return (
            <Tag
              key={item?.key}
              $checked={checked(item?.key)}
              onClick={() => handleChange(item)}
            >
              {item.value}
            </Tag>
          );
        })}
      </Flex>
    </TagWrap>
  );
});

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React是一个用于构建用户界面的JavaScript库。要实现单选按钮,你可以使用React中的表单组件和状态管理。 首先,你可以创建一个React组件来表示单选按钮组。在组件的state中,你可以保存当前选中的选项。然后,通过遍历选项列表,使用input元素和相应的label元素来渲染每个单选按钮。 以下是一个简单的示例代码: ```jsx import React, { useState } from 'react'; const RadioButtonGroup = () => { const [selectedOption, setSelectedOption] = useState(''); const handleOptionChange = (event) => { setSelectedOption(event.target.value); }; return ( <div> <label> <input type="radio" value="option1" checked={selectedOption === 'option1'} onChange={handleOptionChange} /> Option 1 </label> <label> <input type="radio" value="option2" checked={selectedOption === 'option2'} onChange={handleOptionChange} /> Option 2 </label> <label> <input type="radio" value="option3" checked={selectedOption === 'option3'} onChange={handleOptionChange} /> Option 3 </label> </div> ); }; export default RadioButtonGroup; ``` 在上面的代码中,我们使用useState钩子来创建一个名为selectedOption的状态变量,并使用setSelectedOption函数来更新它。handleOptionChange函数用于处理选项改变事件,并更新selectedOption的值。 每个单选按钮都有一个value属性,用于表示它的值。checked属性根据当前选中的选项来确定是否选中该单选按钮。onChange事件监听选项改变,并调用handleOptionChange函数来更新选中的选项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值