【发布时间】:2021-11-04 03:27:50
【问题描述】:
我需要手动更新Form.Item 的值。我有一个自定义组件,它返回选定的值,并希望将此值传递给Form 进行验证,以便我可以发送它。
antd 可以做到这一点吗?
这是简化的代码:
import { Form } from "antd";
import { FC, ReactElement, useEffect, useState } from "react";
const Child: FC<{
returnValue: (value: any) => void;
}> = ({ returnValue }): ReactElement => {
return <input onChange={(e) => returnValue(e.currentTarget.value)} />;
};
export default function App() {
const { useForm } = Form;
const [form] = useForm();
const [value, setValue] = useState<string>("");
const setNewValue = (newVal: string) => setValue(newVal);
useEffect(() => {
console.log(value);
}, [value]);
return (
<div className="App">
test
<Form form={form}>
<Form.Item
//value={value} I'm looking form smth like this
>
<Child returnValue={setNewValue} />
</Form.Item>
</Form>
</div>
);
}
而here 是代码沙箱。
在我的情况下,使用 antd 中的 <Input> 将不起作用。这是一个简化的问题。我有一个更复杂的组件,它的行为方式类似。 returnValue 是我设法从组件中提取值的方法。
【问题讨论】:
-
你已经在App组件的状态“值”中保存了值。如果你想检查状态“值”的变化,你可以使用 useEffect 钩子: useEffect(() => { console.log(value) }, [value]);仅在更改“值”时执行您还可以使用 ant 设计表单的 getFieldsValue({}) 或 getFieldValue(
) 属性获取表单项的所有值。 ant.design/components/form/#FormInstance -
是的。问题是,我看不到将值实际分配给
Form.Item的值的方法。我错过了什么吗? -
Form.Item 没有“值”属性,您可以在此处查看 Form.Item 的属性ant.design/components/form/#Form.Item
-
您可以使用 FormInstance 的 setFieldsValue({}) 函数来设置 Form.Item ant.design/components/form/#FormInstance的值
-
就是这样。谢谢!
标签: javascript reactjs typescript antd