ant4 form

4版本的form
官方Form API

不再需要使用getFieldDecorator绑定字段 在<Form.Item name="field"> 使用name字段即可

validateFieldsAndScroll 校验滚动也变成了 scrollToFirstError={true} 添加到<Form>中即可

不过要使用submit button添加htmlType={"submit"}

normalizegetValueFromEvent 我的感觉是可以实现同样的功能

联动的功能通过getValueFromEvent这个方法 配合form里的其他api基本上都能实现了

可以有效的减少状态库的使用, 在页面初始化的时候设置下详情就够了

剩下的在表单里面就可以操作了

显示详情只需要设置个initialValue或者initialValues

import React, { useEffect, useState } from 'react';
import 'antd/dist/antd.css';
import { DatePicker, Checkbox, Form, Button } from "antd"

const CheckboxGroup = Checkbox.Group;

const options = [
    { label: 'All', value: 'All' },
    { label: 'Apple', value: 'Apple' },
    { label: 'Pear', value: 'Pear' },
    { label: 'Orange', value: 'Orange' },
];

const App = (props) =>  {
    const [form]  = Form.useForm()
    const { getFieldValue, validateFields, setFieldsValue } = form
    const normalizeAll = (value, preValue = []) => {
        const allList = ['All', 'Apple', 'Pear', 'Orange']
        // 可根据需要 通过 setFieldsValue 设置联动效果 
        // normalizeAll 有第二个参数 可以获取老值
        // getValueFromEvent 需要通过getFieldValue 或 getFieldsValue 获取老值
        if (value.indexOf('All') >= 0) {
            if (value.length < allList.length && preValue && preValue.length === allList.length) {
                const index = value.indexOf("All")
                index >= 0 && value.splice(index, 1)
                return value
            }
            return allList;
        }

        if (value.indexOf('All') < 0 && preValue && preValue.indexOf('All') >= 0) {
            return [];
        }

        if (value.indexOf('All') < 0 && value.length === allList.length - 1) {
            return allList;
        }

        if (value.length < allList.length) {
            const index = value.indexOf("All")
            index >= 0 && value.splice(index, 1)
        }
        return value
    };

    const getValueFromEvent = (value) => {
        // 可根据需要 通过 setFieldsValue 设置联动效果
        const preValue = getFieldValue("note")
        const allList = ['All', 'Apple', 'Pear', 'Orange']

        if (value.indexOf('All') >= 0) {
            if (value.length < allList.length && preValue && preValue.length === allList.length) {
                const index = value.indexOf("All")
                index >= 0 && value.splice(index, 1)
                return value
            }
            return allList;
        }

        if (value.indexOf('All') < 0 && preValue && preValue.indexOf('All') >= 0) {
            return [];
        }

        if (value.indexOf('All') < 0 && value.length === allList.length - 1) {
            return allList;
        }

        if (value.length < allList.length) {
            const index = value.indexOf("All")
            index >= 0 && value.splice(index, 1)
        }
        return value
    }

    const handleSubmit = async () => {
        try {
            const values = await validateFields()
            console.log(values)
        } catch (err) {
            const { errorFields } = err
            console.log(errorFields)
        }

    }

    const onValuesChange = (changedValues, allValues) => {
        // key 值修改的字段
        // 可根据需要 通过 setFieldsValue 设置联动效果
        const key = Reflect.ownKeys(changedValues)[0]
        console.log(key)
    }

    return (
        <div className="App">
            <Form
                form={form}
                scrollToFirstError={true}
                onValuesChange={onValuesChange}
            >
                <Form.Item
                    name="note"
                    label="Note"
                    rules={[{required: true,message: "请选择"}]}
                    // normalize={normalizeAll}
                    getValueFromEvent={getValueFromEvent}
                >
                    <CheckboxGroup options={options} />
                </Form.Item>
                <Form.Item
                    name="note1"
                    label="Note1"
                    rules={[{required: true,message: "请选择"}]}
                    normalize={normalizeAll}
                    // getValueFromEvent={getValueFromEvent}
                >
                    <CheckboxGroup options={options} />
                </Form.Item>
                <Button type={"primary"} htmlType={"submit"} onClick={handleSubmit}>提交</Button>
            </Form>
        </div>
    );
}

export default App;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值