Form表单配合Checkbox全选组件封装

该文章展示了如何在React应用中结合AntDesign库,创建一个表单,其中包括Checkbox组件,实现全选和单选的功能。代码示例详细说明了CheckboxGroup的用法,以及如何处理选中状态的变化和表单的提交操作。
摘要由CSDN通过智能技术生成

Form 表单配合 Checkbox 全选组件封装

Form 表单中存在Checkbox多选框,支持全选,以及单选监听等功能

在这里插入图片描述


import { Checkbox, Button, Form, Input } from "antd";
import React, { useEffect, useState } from "react";
const CheckboxGroup = Checkbox.Group;

// 子checkbox可选选项
const plainOptions = ["Apple", "Pear", "Orange"];
// 默认子checkbox已选选项
const defaultCheckedList = ["Pear", "Orange"];

const CheckboxForm = () => {
  const [form] = Form.useForm();
  const [checkedList, setCheckedList] = useState(defaultCheckedList);
  const [indeterminate, setIndeterminate] = useState(false);
  const [checkAll, setCheckAll] = useState(false);

  // 子checkbox Change改变
  const onChange = (list) => {
    form.setFieldValue("checks", list);
    setIndeterminate(!!list.length && list.length < plainOptions.length);
    form.setFieldValue(
      "checkAll",
      !!list.length && list.length < plainOptions.length
    );
    form.setFieldValue("checkAll", list.length === plainOptions.length);
  };
  
  // 全选Checkbox Change改变
  const onCheckAllChange = (e) => {
    form.setFieldValue("checks", e.target.checked ? plainOptions : []);
    setIndeterminate(
      !!form.getFieldValue("checks").length &&
        form.getFieldValue("checks").length < plainOptions.length
    );
    form.setFieldValue("checkAll", e.target.checked);
  };

  // 判断默认选项是否不为空 改变全选checkbox为半选
  useEffect(() => {
    if (checkedList.length) {
      setIndeterminate(
        !!form.getFieldValue("checks").length &&
          form.getFieldValue("checks").length < plainOptions.length
      );
    }
  }, [checkedList.length, form]);

  // 提交
  const onFinish = (values) => {
    console.log("Success:", values);
  };

  return (
    <>
      <Form form={form} onFinish={onFinish}>
        <Form.Item name="input" label="user">
          <Input />
        </Form.Item>
        <Form.Item label="选择">
          <Form.Item
            name="checkAll"
            noStyle
            initialValue={checkAll}
            valuePropName="checked"
          >
            <Checkbox indeterminate={indeterminate} onChange={onCheckAllChange}>
              Check all
            </Checkbox>
          </Form.Item>
          <Form.Item name="checks" noStyle initialValue={checkedList}>
            <CheckboxGroup options={plainOptions} onChange={onChange} />
          </Form.Item>
        </Form.Item>
        <Form.Item>
          <Button type="primary" htmlType="submit">
            Submit
          </Button>
        </Form.Item>
      </Form>
    </>
  );
};
export default CheckboxForm;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值