如果 initialValue 改变,则更新 antd 表单

Jid*_*ide 12 reactjs antd

我正在将当前用户数据从我的 Redux-saga 传递到 antd 表单中,姓名、电子邮件、电话号码、介绍作为初始值传递给表单,我想要做的是我想将表单作为放置请求提交给数据库,如果初始值已更改.. 这是我的代码

import React  from 'react';
import {createStructuredSelector} from 'reselect';
import { connect } from 'react-redux';
import { selectCurrentUser } from '../../redux/user/user.selector';



import { Form, Input, Button } from 'antd';

import './profile_form.styles.css'

/* eslint-disable no-template-curly-in-string */
const ProfileForm = ({currentUser}) => {
  const {name, email} = currentUser


  const onFinish = values => {
    console.log(values);
  };

  const layout = {
    labelCol: {
      span: 7,
    },
    wrapperCol: {
      span: 15,
    },
  };


  return (
    <Form className='profile-form' {...layout} 
    onFinish={onFinish}  
    initialValues={{ firstname: name, lastname: name, email: email }} 
    >
      <Form.Item
        name='firstname'
        label="First Name"
      >
        <Input  />
      </Form.Item> 
       <Form.Item
        name= 'lastname'
        label="Last Name"
      >
        <Input  value={name}/>
      </Form.Item>
      <Form.Item
        name='email'
        label="Email"

      >
        <Input value={email} />
      </Form.Item>
      <Form.Item name= 'phonenumber' label="Phone Number"
      >
        <Input />
      </Form.Item>
      <Form.Item name='introduction' label="Introduction"
      >
        <Input.TextArea />
      </Form.Item>
      <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 8 }}>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  );
};

const mapStateToProps = createStructuredSelector({
  currentUser:selectCurrentUser
})  

export default connect(mapStateToProps) (ProfileForm);
Run Code Online (Sandbox Code Playgroud)

我在 antd api 中找到了“onValuesChange”,但不知道如何使用它。

小智 18

如果您使用钩子,您可以使用以下代码添加 useEffect:

useEffect(() => {
 form.setFieldsValue(defaultValues)
}, [form, defaultValues])
Run Code Online (Sandbox Code Playgroud)

记住首先定义表单值:

const [form] = Form.useForm()
Run Code Online (Sandbox Code Playgroud)

并记住将此表单实例传递给 Form 组件:

<Form
    form={form}
    layout="vertical"
    name="form-name"
    initialValues={defaultValues}
    onFinish={submitHandler}
  >
Run Code Online (Sandbox Code Playgroud)

在这种形式中,您将在组件呈现时更新 defaultValues。如果您正在使用类,您可以将代码放在 componentDidUpdate 生命周期方法中。

问候


小智 1

您可以使用 componentDidUpdate 生命周期方法来比较先前的 props 和当前的 props 值,以检查初始值是否发生更改。如果发生更改,则进行 api 调用以保存在数据库中。希望这可以帮助