initialValue が変更された場合、antd フォームを更新する 質問する

initialValue が変更された場合、antd フォームを更新する 質問する

Redux-saga から currentUser データを antd フォームに渡しています。名前、メール、電話番号、紹介が初期値としてフォームに渡されます。私がやりたいのは、初期値が変更された場合にフォームを PUT リクエストとして DB に送信することです。これが私のコードです。

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);

antd api で「onValuesChange」を見つけましたが、どのように使用すればよいのかわかりません。

ベストアンサー1

フックを使用している場合は、次のコードで useEffect を追加できます。

useEffect(() => {
 form.setFieldsValue(defaultValues)
}, [form, defaultValues])

最初にフォームの値を定義することを忘れないでください:

const [form] = Form.useForm()

このフォーム インスタンスを Form コンポーネントに渡すことを忘れないでください。

<Form
    form={form}
    layout="vertical"
    name="form-name"
    initialValues={defaultValues}
    onFinish={submitHandler}
  >

このフォームでは、コンポーネントがレンダリングされるときに defaultValues を更新します。クラスを使用している場合は、componentDidUpdate ライフサイクル メソッド内にコードを配置できます。

よろしく

おすすめ記事