如何使用ant设计表单initialValue

YOU*_*KIM 2 javascript reactjs react-apollo antd

使用 antd Form initialValue 哪个是正确的?

我想知道 antd form initialValue 是用来设置初始数据还是只是在表单没有值时显示值。

const Component = ({ id }) => {
  const initialName = 'John'
  const { data } = useQuery(GET_NAME, { variables: { id } })
  if (data) { 
    initialName = data.name 
  }

  return (
  <Form.Item>
    {form.getFieldDecorator('name', { initialValue: initialName })(<Input />)}
   </Form.Item>
 )
}

Run Code Online (Sandbox Code Playgroud)
const Component = ({ id }) => {
  const { data } = useQuery(GET_NAME, {
    variables: { id },
    onCompleted: res => { form.setFieldsValue({ name: res.data.name }) }
  })

  return (
  <Form.Item>
    {form.getFieldDecorator('name', { initialValue: 'John' })(<Input />)}
   </Form.Item>
 )
}
Run Code Online (Sandbox Code Playgroud)

aah*_*orn 10

对我来说,initialValues如果它是表单加载时已经存在的对象,则设置它的工作原理,让我们假设它是“静态”的。但是,当异步获取该对象(使用挂钩useEffect)时,initialValues甚至initialValue表单项目上的设置似乎不起作用。有什么想法吗?

  • 请将您的问题作为问题而不是答案发布!无论如何,我认为[这个](https://github.com/ant-design/ant-design/issues/22372#issuecomment-602102164)回答了你的问题。每次初始值更改时,您都应该调用“setFieldValues”。 (11认同)

Sop*_*man 6

在 useEffect 中使用“setFieldsValue”效果惊人!

useEffect(() => {
    props.form.setFieldsValue({
        someFormField: formCalculatedValue,
    });        
}, [someDependencies]);
Run Code Online (Sandbox Code Playgroud)


Hos*_*adi 5

您应该使用 Form 组件包装您的表单项,并将初始值添加到 Form 而不是 Form.Item。

例如:


<Form
      initialValues={{ username:'default value' }}
      onFinish={onFinish}
      onFinishFailed={onFinishFailed}
    >
      <Form.Item
        label="Username"
        name="username"
        rules={[{ required: true, message: 'Please input your username!' }]}
      >
        <Input />
      </Form.Item>
    </Form>

Run Code Online (Sandbox Code Playgroud)


小智 1

它将将该值设置为您分配的初始值,因此第一种方法是正确的

你可以在这里查看https://ant.design/components/form/#API