返回顶部
首页 > 资讯 > 前端开发 > JavaScript >antdform表单中如何嵌套自定义组件
  • 912
分享到

antdform表单中如何嵌套自定义组件

antdform表单嵌套自定义组件antd自定义组件 2023-03-12 14:03:14 912人浏览 泡泡鱼
摘要

目录前言表单部分自定义组件总结前言 当某些自定义的组合类组件,也希望能进行表单元素的校验,以及利用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

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

asyncValidator的用法

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

(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方法,可以改变表单域的值,实现了表单带给我们的便捷功能。到此结束啦,快试试吧,实践出真知呀!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: antdform表单中如何嵌套自定义组件

本文链接: https://lsjlt.com/news/199444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • antdform表单中如何嵌套自定义组件
    目录前言表单部分自定义组件总结前言 当某些自定义的组合类组件,也希望能进行表单元素的校验,以及利用antd的form表单实例进行数据的修改或者数据获取,这招便可以派上用场啦~ 表单部...
    99+
    2023-03-12
    antd form表单 嵌套自定义组件 antd自定义组件
  • antdform表单如何处理自定义组件
    目录antd form表单处理自定义组件以下是从antd找到的解决思路antd form表单中嵌套自定义组件表单部分自定义组件总结antd form表单处理自定义组件 使用 antd...
    99+
    2023-05-17
    antd form表单 处理自定义组件 form表单自定义组件
  • 如何生成vue自定义组件和嵌套表单组件
    本篇内容介绍了“如何生成vue自定义组件和嵌套表单组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用form-create动态生成vue...
    99+
    2023-07-04
  • antd form表单中怎么嵌套自定义组件
    本篇内容主要讲解“antd form表单中怎么嵌套自定义组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“antd form表单中怎么嵌套自定义组件”吧!表单部分<Fo...
    99+
    2023-07-05
  • 如何使用form-create动态生成vue自定义组件和嵌套表单组件
    这篇文章主要介绍了如何使用form-create动态生成vue自定义组件和嵌套表单组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用fo...
    99+
    2024-04-02
  • Angular19 中如何自定义表单控件
    这期内容当中小编将会给大家带来有关Angular19 中如何自定义表单控件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 需求当开发者需要一个特定的表单控件时就需要自己...
    99+
    2024-04-02
  • Vue如何实现嵌套菜单组件
    这篇文章主要介绍“Vue如何实现嵌套菜单组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue如何实现嵌套菜单组件”文章能帮助大家解决问题。本文旨在使用Vue.js完成一个嵌套的菜单组件,使用mo...
    99+
    2023-07-02
  • vue嵌套路由如何定义
    在vue中定义嵌套路由的方法:1.新建项目,引入vue和vue-router;2.使用Vue.use方法注册路由;3.引入home和game组件;4.使用const routes语句定义嵌套路由;具体步骤如下:首先,在新建一个html项目,...
    99+
    2024-04-02
  • antdForm组件表单在vue3中的使用方式
    目录antd Form组件表单在vue3使用官方文档里写的很清楚总结antd Form组件表单在vue3使用 antd Form表单组件有个最需要注意的问题, 官方文档里写的很清楚 ...
    99+
    2023-05-17
    antd Form组件表单 antd Form组件 vue3 antd Form组件表单
  • Android实现Ant Design 自定义表单组件
    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法(使用起来确实很爽),这时需要...
    99+
    2023-05-31
    ant design 表单组件
  • antd vue中,如何在form表单中的自定义组件使用v-decorator
    目录antd vue中在form表单中的自定义组件使用v-decorator问题描述分析简单说明v-decorator antd vue的理解总结antd vue中在form表单中的...
    99+
    2023-05-17
    antd vue form表单自定义组件 自定义组件v-decorator
  • Android自定义组件:2、如何实现和使用自定义组件、自定义属性
    声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!! 目录 一、前言 二、如何实现自定义组件 步骤1:写 attrs.xml 资源文件 1、...
    99+
    2022-06-06
    属性 自定义属性 Android
  • 如何在Android中自定义UI组件
    如何在Android中自定义UI组件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android开发自定义UI组件实现红色小球跟随手指移动要写实现自定义UI组件,要创建一个Ba...
    99+
    2023-06-15
  • VueelementUI自定义表单模板组件功能实现
    elementUI 实现一个自定义的表单模板组件注:该功能基于elementUI 背景:在项目开发中,我们会遇到这种需求,在管理后台添加自定义表单,在指定的页面使用定义好的表单 直...
    99+
    2022-12-24
    Vue elementUI 自定义表单模板组件 Vue elementUI 自定义表单
  • Python中Django 后台自定义表单控件
    在 django 中我们可以在 admin.py 中添加 ModelAdmin,这样就能很方便地在后台进行增删改查的操作。然而,对应 Model 生成的表单,并不友好,我们希望能像前端开发一样做出各种类型的...
    99+
    2022-06-04
    自定义 表单 控件
  • 如何在结构体中嵌套定义两层类型?
    知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个Golang开发实战,手把手教大家学习《如何在结构体中嵌套定义两层类型?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新...
    99+
    2024-04-04
  • C++如何自定义单向链表ListNode
    小编给大家分享一下C++如何自定义单向链表ListNode,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 链表有两种: 1、带头结点,头结点存...
    99+
    2023-06-29
  • vue2中如何自定义组件的v-model
    目录如何自定义组件的v-model父组件子组件 SearchTab子组件示例vue2与vue3在自定义组件v-model的区别在vue2中,通常这样实现在vue3中,通过这样实现如何...
    99+
    2022-11-13
    vue2自定义组件 vue2中v-model 自定义组件v-model
  • Angular如何使用ControlValueAccessor实现自定义表单控件
    这篇文章主要介绍了Angular如何使用ControlValueAccessor实现自定义表单控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本篇文章给大家介绍一下Angu...
    99+
    2023-06-14
  • Android中怎么自定义组件卫星菜单
    Android中怎么自定义组件卫星菜单,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先如果要想自定义组件 那么第一件事就是赋予自定义组件的属性,从效果图上看出,该组件可以...
    99+
    2023-05-31
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作