文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

antd form表单中怎么嵌套自定义组件

2023-07-05 11:19

关注

本篇内容主要讲解“antd form表单中怎么嵌套自定义组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“antd form表单中怎么嵌套自定义组件”吧!

表单部分

<Form.Item label="周期" labelAlign="right">    {getFieldDecorator('cycle', {        rules: [{ required: true, validator: checkCycle }],        initialValue: cycle,    })(<CycleInput cycleOptions={cycleOptions} />)}</Form.Item>

表单部分可以引入自定义的校验逻辑,如上面的checkCycle :

可以像下面这样,通过Promise.reject()返回错误校验提示,通过Promise.resolve()正确通过校验。

const checkCycle = useCallback((_, value) => {     const format = value?.split(' ');     if (!format) return Promise.reject(new Error('周期不可为空!'));          if (format.length < 2 && format[0] === 'always') {         return Promise.resolve();     }     if (format[1] === 'undefined') {         return Promise.reject(new Error('请选择周期!'));     }     const num = +format[0];     if (num > 0 && format[1]) {         return Promise.resolve();     }     return Promise.reject(new Error('请输入大于 0 的数字!')); }, []);

有关校验的内容,antd也是参考一个成熟的库 async-validator,上面这种写法可以参考文档这块 asyncValidator

如果懒得看文档直接看图:

antd form表单中怎么嵌套自定义组件

大概意思就是说,可以通过两种方式来实现一些异步校验:

(1)可以通过调用callback,即asyncValidator的第三个参数,来完成校验

(2)可以通过返回Promise,来完成校验

自定义组件

注意value是该表单域的值,onChange是对应可以改变该表单域的值的方法

const CycleInput = ({ value, onChange, cycleOptions }) => {    const format = value?.split?.(' ');    const num = format?.[0];    const type = format?.[1];    const triggerChange = changedValue => {        onChange && onChange(changedValue);    };            const [cycleOption, setCycleOption] = useState(type ?? num);    const [cycleInputValue, setCycleInputValue] = useState(        (typeof +num === 'number' && !_.isNaN(+num) && num) || '',    );    const onCycleChange = cycleOption => {        setCycleOption(cycleOption);        triggerChange(            cycleOption === 'always'                ? cycleOption                : `${cycleInputValue} ${cycleOption}`,        );    };    const onInputChange = e => {        const newNumber = parseInt(e.target.value || '0', 10);        if (_.isNaN(newNumber)) {            return;        }        setCycleInputValue(newNumber);        triggerChange(            cycleOption === 'always' ? cycleOption : `${newNumber} ${cycleOption}`,        );    };    return (        <Input.Group>            {cycleOption === 'always' ? (                <Select                    onChange={onCycleChange }                    defaultValue={cycleOption}                    style={{ width: 240 }}                >                    {cycleOptions.map(item => (                        <Select.Option key={item.value} value={item.value}>                            {item.label}                        </Select.Option>                    ))}                </Select>            ) : (                <span>                    <Input                        value={cycleInputValue}                        style={{ width: 156 }}                        onChange={onInputChange}                    />                    <Select                        onChange={onCycleChange}                        defaultValue={cycleOption}                        style={{ width: 84 }}                    >                        {cycleOptions.map(item => (                            <Select.Option key={item.value} value={item.value}>                                {item.label}                            </Select.Option>                        ))}                    </Select>                </span>            )}        </Input.Group>    );};

可以看出,自定义部分逻辑也比较简单,通过value参数可以展示组件的值,通过onChange方法,可以改变表单域的值,实现了表单带给我们的便捷功能。到此结束啦,快试试吧,实践出真知呀!

到此,相信大家对“antd form表单中怎么嵌套自定义组件”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯