Concis组件库封装——CheckBox多选框/多选组

简介: Concis组件库封装——CheckBox多选框/多选组组件封装

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~

很高兴今天看了下npm的数据,周下载量竟然有700+,也是很感谢不论是使用和学习都是对我的一种支持......

在这里插入图片描述
贴一下npm的地址~ https://www.npmjs.com/package/react-view-ui

多选框的组件文档如下:

在这里插入图片描述
在这里插入图片描述
组件源码如下:

import React, {
   
    FC, memo, ReactNode, useState, useCallback, useMemo, Fragment } from 'react'
import {
   
    CheckOutlined } from '@ant-design/icons';
import "./index.module.less";

type checkGroup = {
   
   
  label: string;
  value: string | number;
  checked?: boolean;
  disabled?: boolean;
}
interface checkBoxProps {
   
   
  children?: ReactNode
  /**
   * @description 默认选中状态
   * @default boolean
   */
  checked?: boolean
  /**
   * @description 禁用
   * @default boolean
   */
  disabled?: boolean
  /**
   * @description 多选组配置
   * @default Array
   */
  group?: Array<checkGroup>
  /**
   * @description 多选框选中回调函数
   */
  checkCallback?: Function;
  /**
   * @description 多选组改变回调函数
   */
  checkGroupCallback?: Function;
}

const CheckBox: FC<checkBoxProps> = (props) => {
   
   
  const {
   
    children, checked, disabled, group, checkCallback, checkGroupCallback } = props;

  const [checkStatus, setCheckStatus] = useState<boolean>(checked || false);
  const [checkGroup, setCheckGroup] = useState<Array<checkGroup>>(group || []);

  const toggleCheckedStatus = () => {
   
                  //多选单组件切换状态
    if (disabled) return;
    setCheckStatus(!checkStatus);
    checkCallback && checkCallback(!checkStatus)
  }
  const toggleGroupCheckedStatus = (index: number) => {
   
        //切换多选组状态
    const oldCheckGroup = [...checkGroup];
    oldCheckGroup[index].checked = oldCheckGroup[index]?.checked ? !oldCheckGroup[index].checked : true;
    setCheckGroup(oldCheckGroup);
    checkGroupCallback && checkGroupCallback(oldCheckGroup);
  }
  const renderCheckBoxDom = useMemo(() => {
   
            //渲染单check状态
    if (disabled) {
   
   
      return (
        <div className="disblaed-checkBox"></div>
      )
    } else if (checkStatus) {
   
   
      return (
        <div className="checkBox-actived">
          <CheckOutlined />
        </div>
      )
    } else {
   
   
      return (
        <div className="checkBox-noActived"></div>
      )
    }
  }, [checkStatus, checked])
  const renderCheckGroupDom = useCallback((checkBoxOptions: checkGroup) => {
   
         //渲染checkbox组状态   
    if (checkBoxOptions.disabled) {
   
   
      return (
        <div className="disblaed-checkBox"></div>
      )
    } else if (checkBoxOptions.checked) {
   
   
      return (
        <div className="checkBox-actived">
          <CheckOutlined />
        </div>
      )
    } else if (!checkBoxOptions.checked) {
   
   
      return (
        <div className="checkBox-noActived"></div>
      )
    }
  }, [group])

  return (
    <Fragment>
      {
   
   
        group && group.length
          ?
          <div className="checkGroup">
            {
   
   
              group.map((c: checkGroup, i: number) => {
   
   
                return (
                  <div className="checkbox groupBox" key={
   
   i} onClick={
   
   () => toggleGroupCheckedStatus(i)}>
                    {
   
   
                      renderCheckGroupDom(c)
                    }
                    <div className="text">{
   
   c.label}</div>
                  </div>
                )
              })
            }
          </div>
          :
          <div className="checkbox" onClick={
   
   toggleCheckedStatus}>
            {
   
   
              renderCheckBoxDom
            }
            <div className="text">{
   
   children}</div>
          </div>
      }

    </Fragment>

  )
}

export default memo(CheckBox);

如果有喜欢的,学习或者使用的觉得好的,点个小星星哦~,组件有任何bug或者疑问、功能建议欢迎留言。

目录
相关文章
|
2月前
|
移动开发 JavaScript 小程序
uniapp中组件库的Radio 单选框丰富的使用方法
uniapp中组件库的Radio 单选框丰富的使用方法
290 0
|
9天前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
22 1
|
2月前
|
移动开发 小程序 API
uniapp组件库Modal 模态框 的使用方法
uniapp组件库Modal 模态框 的使用方法
129 1
|
2月前
|
移动开发 JavaScript 小程序
uniapp中组件库的Checkbox 复选框 的丰富使用方法
uniapp中组件库的Checkbox 复选框 的丰富使用方法
519 0
|
2月前
uniapp中组件库的Checkbox 复选框的使用方法
uniapp中组件库的Checkbox 复选框的使用方法
|
2月前
|
C++
C++ Qt开发:CheckBox多选框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`CheckBox`单行输入框组件的常用方法及灵活运用。`QCheckBox` 是 Qt 中用于实现复选框的组件,它提供了丰富的功能和灵活性。与之前文章中的`RadioButton`组件不同,`CheckBox`组件支持多项选择以及三态支持,即可以是选中、未选中或半选中的状态。
86 0
C++ Qt开发:CheckBox多选框组件
|
2月前
|
移动开发 小程序 JavaScript
uniapp中组件库的Textarea 文本域的丰富使用方法
uniapp中组件库的Textarea 文本域的丰富使用方法
152 0
|
2月前
|
小程序 JavaScript
小程序表单组件——button
小程序表单组件——button
41 0
|
前端开发 JavaScript API
Concis组件库封装——Popover气泡卡片
Concis组件库封装——Popover气泡卡片组件记录
124 1
antd组件库封装47-button组件编写1
antd组件库封装47-button组件编写1
60 0
antd组件库封装47-button组件编写1