react antd Form.List动态设置默认值

注意:代码中的两个select是级联的,切换第一个select的内容会设置第二个select的默认值

 

js部分

const [form] = Form.useForm();

    const cityData = ['kafka1', 'testTwo'];

    const logassetData = {

        kafka1: ['logasset', '测试222'],

        testTwo: ['测试一一一', '测试二二二'],

    };

    const [cities, setCities] = useState(logassetData[cityData[0]]);

    const [secondCity, setSecondCity] = useState(logassetData[cityData[0]][0]);

    const [open, setOpen] = useState(true);

    //下拉框级联

    const handleProvinceChange = (value, key) => {

        //change时设置默认值

        const fields = form.getFieldsValue();

        const { ziduan } = fields; //ziduan是Form.List的name,需要拿出来重新组装下数据

        if (value) {

            Object.assign(ziduan[key], { logasset: logassetData[value][0] })

            form.setFieldsValue({ ziduan })

            setSecondCity(logassetData[value][0]);

            setCities(logassetData[value]);//设置第二个下拉框的默认值

        }

    };

    const onSecondCityChange = (value) => {

        setSecondCity(value);

    };

html部分

 <Form className='formContainer' form={form}>

            {/* 初始化默认展示两行 ,默认展示几行就在initialValue下写几个对象,好像可以设置数字,不过我没试过*/}

            <Form.List name="ziduan" initialValue={[{ logasset: secondCity }, { logasset: secondCity }]}>

                {(fields, { add, remove }) => (

                    <div className={'ziduan'}>

                        <Row>

                            <Col span={8} style={{ fontSize: 18, fontWeight: 600 }}>

                                表

                            </Col>

                        </Row>

                        {fields.map(({ key, name, ...restField }) => (

                            <div className='yuanBiao' style={{ display: 'flex', alignItems: 'center',                                 marginTop: 15, position: 'relative' }} key={key}>

                                <Row

                                    style={{ width: '100%' }}

                                >

                                    <Col className="gutter-row" span={11}>

                                        <Form.Item

                                            name={[name, 'kafka1']}

                                            {...restField}

                                            rules={[

                                                {

                                                    required: true,

                                                    message: 'kafka1不能为空',

                                                },

                                            ]}

                                        >

                                            <Select

                                                allowClear

                                                options={cityData.map((province) => ({

                                                    label: province,

                                                    value: province,

                                                }))}

                                                onChange={(e) => handleProvinceChange(e, key)}

                                                defaultValue={cityData[0]}

                                            >

                                            </Select>

                                        </Form.Item>

                                    </Col>

                                    <Col className="gutter-row" span={11}>

                                        <Form.Item

                                            name={[name, 'logasset']}

                                            {...restField}

                                            rules={[

                                                {

                                                    required: true,

                                                    message: 'logasset不能为空',

                                                },

                                            ]}

                                        >

                                            <Select

                                                allowClear

                                                onChange={onSecondCityChange}

                                                options={cities.map((city) => ({

                                                    label: city,

                                                    value: city,

                                                }))}

                                            >

                                            </Select>

                                        </Form.Item>

                                    </Col>

                                    <Col span={1}>

                                        <div

                                            onClick={() => remove(name)}

                                            style={{ margin: '4px 0px 0px 12px' }}

                                        >

                                            <MinusCircleOutlined />

                                        </div>

                                    </Col>

                                </Row>

                            </div>

                        ))}

                        <Row justify={'space-between'} align={'middle'} gutter={[16, 0]}>

                            <Col span={24}>

                                <Button

                                    type="dashed"

                                    onClick={() => add({ logasset: cities[0] })}

                                    block

                                    icon={<PlusOutlined />}

                                    style={{ marginBottom: '20px' }}

                                >

                                </Button>

                            </Col>

                            <Col span={1} />

                        </Row>

                    </div>

                )}

            </Form.List>

</Form>

 // rules只有在设置了name属性之后才生效,如不需要展示lable,则*也会消失,需要设置css样式即可

  .target::before {

        display: inline-block;

        margin-right: 4px;

        color: #ff4d4f;

        font-size: 14px;

        font-family: SimSun, sans-serif;

        line-height: 1;

        content: '*';

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用 React Hooks 和 Ant Design 的 Form 组件来进行自定义文本框的校验,输入内容立即消失的问题,你可以尝以下方法: 1. 使用 useState Hook 来踪输入框的值,并在输入框值生变化时更新状态。 2. Form 组件的 onFinish 回调函数中进行校逻辑。可以通过检查输入框的是否符合要求来决定是否提示错误信息。 3. 使用 Ant Design 的 message 组件来显示错误提示信息。可以校验失败时调 message.error() 方法来显示信息,并在校验成功时用 message.success() 方法消除提示信息。 以下一个示例代码: ```jsximport React, { useState 'react'; import { Form, Input, Button, message } from 'antd'; const MyCustomRichTextEditor = () => { const [content, setContent] = useState(''); const onFinish = (values) => { //行校验逻辑 if (content === '') { message.error('内容不能为空'); return; } // 校验通过,提交表单 // ... // 提示信息消失 message.success('提交成功'); }; return ( <Form onFinish={onFinish}> <Form.Item name="content" rules={[{ required: true, message: '请输入内容' }]} > <Input.TextArea value={content} onChange={(e) => setContent(e.target.value)} /> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit"> 提交 </Button> </Form.Item> </Form> ); }; export default MyCustomRichTextEditor; ``` 在上面的代码中,我们使用 useState 来追踪输入框的值,并在输入框值发生变化时更新状态。在 onFinish 回调函数中,我们进行了校验逻辑,如果发现内容为空,则使用 message.error() 方法显示错误信息,否则使用 message.success() 方法显示提交成功的提示信息。 希望这个示例能解决你的问题!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值