Antd React Form.Item内部是自定义组件怎么自定义返回值

文章讲述了如何在AntDesign的Form.Item中使用自定义的SelfTreeSelect组件,以获取用户选择的树节点的名称和值,并展示了如何在父组件中处理提交时返回包含名称信息的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 在线演示
  • https://stackblitz.com/edit/stackblitz-starters-xwtwyz?file=src%2FSelfTreeSelect.tsx

需求

  • 当我们点击提交,需要返回用户名和选中树的id信息,但是,我不关要返回树的id信息,还需要返回选中树的名称
//默认返回的
{
	userName:'梦洁',
	treeInfo:'leaf1-value'
}
//但是需要返回的如下
{
	userName:'梦洁'
	treeInfo:{
		name:'leaf1-name',
		value:'leaf1-value'
	}
}

做法

了解下Form.Item怎么获取值的

  • 大概就是这样子

实现自定义

  • 主组件index.tsx
import {Form,Input,Button} from "antd";
import SelfTreeSelect from "../../component/SelfTreeSelect";

const Index = () => {
    const [form] = Form.useForm();
    const onFinish = (values: any) => {
        console.log('Success:', values);
    };

    /*初始化值*/
    const setInitValue = () => {
        form.setFieldsValue({
            username:'梦洁',
            treeInfo:{
                value:'leaf1-value',
                //这里传入数组是因为对于树来说,可以多选,所以后端保存的值也可能是数组,
                list:['leaf1-title']
            }
        })
    }
    return (
        <>
            <Form
                form={form}
                name="basic"
                onFinish={onFinish}
            >
                <Form.Item
                    label="用户名"
                    name="username"
                    rules={[{required: true, message: 'Please input your username!'}]}
                >
                    <Input/>
                </Form.Item>
                {/*自定义组件*/}
                <Form.Item
                    name="treeInfo"
                    label="树的信息"
                >
                    <SelfTreeSelect/>
                </Form.Item>
                <Form.Item >
                    <Button type="primary" htmlType="submit">
                        Submit
                    </Button>
                </Form.Item>
            </Form>
            <Button onClick={setInitValue}>点击我初始化值</Button>
        </>
    );
};

export default Index;
  • 自定义组件SelfTreeSelect.tsx
import React, {useEffect, useState} from 'react';
import { TreeSelect } from 'antd';
const treeData = [
    {
        value: 'parent 1-value',
        title: 'parent 1-title',
        children: [
            {
                value: 'parent 1-0-value',
                title: 'parent 1-0-title',
                children: [
                    {
                        value: 'leaf1-value',
                        title: 'leaf1-title',
                    },
                    {
                        value: 'leaf2-value',
                        title: 'leaf2-title',
                    },
                ],
            },
        ],
    },
];
/* 默认值,初始值?form设置值 */
const SelfTreeSelect = (props:any) => {
    const { value,onChange } = props;
    console.log('查看传入的值',props)
    /*这里简单演示下回填值*/
    useEffect(() => {
        setCurrentValue(value?.list[0])
    }, [props]);
    /*内部值,这样子就可以设置这个值来实现默认值的操作了*/
    const [currentValue, setCurrentValue] = useState<string>();

    const onSelectChange = (newValue: string,selectList:never[]) => {
        console.log('输出新值第一个为选中的value,第二个为选中的title数组',newValue,selectList)
        setCurrentValue(newValue);
        onChange({
            value:newValue,
            list:selectList,
        })
    };
    return (
        <TreeSelect
            showSearch
            style={{ width: '100%' }}
            value={currentValue}
            dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
            placeholder="Please select"
            allowClear
            treeDefaultExpandAll
            onChange={onSelectChange}
            treeData={treeData}
        />
    );
};

export default SelfTreeSelect;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未成年梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值