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或者疑问、功能建议欢迎留言。

目录
相关文章
|
7月前
|
移动开发 JavaScript 小程序
uniapp中组件库的Radio 单选框丰富的使用方法
uniapp中组件库的Radio 单选框丰富的使用方法
756 0
|
7月前
Uniapp checkbox 多选框组件 自行修改 checkbox
Uniapp checkbox 多选框组件 自行修改 checkbox
91 0
|
7月前
|
测试技术
【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单
【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单
|
5月前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
184 1
|
7月前
|
移动开发 JavaScript 小程序
uniapp中组件库的Checkbox 复选框 的丰富使用方法
uniapp中组件库的Checkbox 复选框 的丰富使用方法
919 0
|
7月前
uniapp中组件库的Checkbox 复选框的使用方法
uniapp中组件库的Checkbox 复选框的使用方法
|
7月前
|
移动开发 小程序 JavaScript
uniapp中组件库的Textarea 文本域的丰富使用方法
uniapp中组件库的Textarea 文本域的丰富使用方法
280 0
|
JavaScript
VUE element-ui之table表格中嵌套输入框,且输入框失焦自动勾选当前行
VUE element-ui之table表格中嵌套输入框,且输入框失焦自动勾选当前行
1719 0
VUE element-ui之table表格中嵌套输入框,且输入框失焦自动勾选当前行
|
JavaScript 编译器 开发者
uniapp复选框自定义样式&data数据与style交互
uniapp复选框自定义样式&data数据与style交互
159 0
55zTree - 配合 checkbox 的隐藏
55zTree - 配合 checkbox 的隐藏
33 0

热门文章

最新文章