antd design(4.x)中的Form编辑表单

antd 3.x 版本升级到 antd 4.x 版本存在兼容

移除废弃的 API
移除了 Modal.xxx 的 iconType 属性,请使用 icon 替代。

移除了 Form.create 方法,form 现可由 Form.useForm 获取。

移除了 Form.Item 的 id 属性,请使用 htmlFor 替代。

需求:从用户列表页面进入编辑页

通过ID查到用户信息,回填表单

(1) 跳转页面

  render: (text, record, index) => (
  <div>
	 <Button
	       type="primary"
	       size="small"
	       onClick={() => handleEdit(record.key)}
	   >
	     修改
	   </Button>
  </div>

  //编辑用户
  let handleEdit = (userId) => {
    props.history.push({
      pathname:'/admin/userInfoEdit/',
      state: {
        userId: userId,
      }
    });
  };

(2)编辑页

  1. 拿到userIdconst userId = props.location.state.userId
  2. 获取数据
  const [form] = Form.useForm();
  useEffect(() => {
    console.log('改变');
    //模拟获取数据
    setTimeout(() => {
      form.setFieldsValue({
        user: '测试',
        website: '测试自动填充',
      });
    }, 1000);
  },[]);

(3)改变表单数据

<Input placeholder="请输入用户名"  onChange={e=>setUserName( e.target.value)}/>

(4)提交保存

 //提交保存
  const onFinish = values => {
    console.log(values);
  };

效果

在这里插入图片描述
在这里插入图片描述

(5)完整代码

import React, {Component, useState, useEffect} from 'react';
import {Form, Input, InputNumber, Button} from 'antd';

const layout = {
  labelCol: {
    span: 2,
  },
  wrapperCol: {
    span: 16,
  },
};
const validateMessages = {
  required: '${label} is required!',
  types: {
    email: '${label} is not validate email!',
    number: '${label} is not a validate number!',
  },
  number: {
    range: '${label} must be between ${min} and ${max}',
  },
};

function UserInfoEdit(props) {
  const userId = props.location.state.userId;
  console.log(userId);

  const [userName, setUserName] = useState('张三');
  const [editFrom, seteditFrom] = useState({
    user: '',
    website: 'form.website',
    email: '1032060699@qq.com',
    age: 18,
    introduction: 18,
  });
  const [form] = Form.useForm();
  useEffect(() => {
    console.log('改变');
    //模拟获取数据
    setTimeout(() => {
      form.setFieldsValue({
        user: '测试',
        website: '测试自动填充',
      });
    }, 1000);
  },[]);
  //表单改变
  const updateField = e => {
    console.log(e.target.value);
    seteditFrom({
      ...editFrom,
      [e.target.name]: e.target.value
    });
  };
  //提交保存
  const onFinish = values => {
    console.log(values);
  };
  const onFill = () => {
    form.setFieldsValue({
      user: '测试',
      website: '测试自动填充',
    });
  };

  return (
      <Form  {...layout} name="nest-messages"
             initialValues={{
               user: '',
               website: editFrom.website,
               email: '1032060699@qq.com',
               age: 18,
               introduction: 18,
             }}
             onFinish={onFinish} validateMessages={validateMessages}
             form={form}>
        <Form.Item
            name='user'
            label="Name"
            rules={[
              {
                required: true,
              },
            ]}
        >
          <Input placeholder="请输入用户名"
                 onChange={ updateField }/>
        </Form.Item>
        <Form.Item
            name='email'
            label="Email"
            rules={[
              {
                type: 'email',
              },
            ]}
        >
          <Input/>
        </Form.Item>
        <Form.Item
            name='age'
            label="Age"
            rules={[
              {
                type: 'number',
                min: 0,
                max: 99,
              },
            ]}
        >
          <InputNumber />
        </Form.Item>
        <Form.Item name='website' label="Website">
          <Input   onChange={ updateField }/>
        </Form.Item>
        <Form.Item name='introduction' label="Introduction">
          <Input.TextArea/>
        </Form.Item>
        <Form.Item wrapperCol={{...layout.wrapperCol, offset: 8}}>
          <Button type="primary" htmlType="submit">
            保存
          </Button>
          <Button type="link" htmlType="button" onClick={onFill}>
            Fill form
          </Button>
        </Form.Item>
      </Form>
  );

}

export default UserInfoEdit;

在React.js和Ant Design 4.x表单的提交可以通过使用Form组件的onFinish属性来实现。当表单的所有表单项都通过验证时,onFinish事件会被触发,并且会将表单的值作为参数传递给事件处理函数。下面是一个简单的例子,展示了如何在React.js和Ant Design 4.x提交表单。 首先,在你的代码导入所需的模块: ```js import React, { useState } from 'react'; import { Form, Input, Button } from 'antd'; ``` 接下来,创建一个表单组件: ```js const MyForm = () => { // 定义表单项的值 const [form] = Form.useForm(); // 表单提交事件 const handleSubmit = (values) => { console.log('Received values of form: ', values); // 在这里可以提交表单数据到服务器 }; return ( <Form form={form} onFinish={handleSubmit}> <Form.Item label="Username" name="username" rules={[{ required: true, message: 'Please input your username!' }]}> <Input /> </Form.Item> <Form.Item label="Password" name="password" rules={[{ required: true, message: 'Please input your password!' }]}> <Input.Password /> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit"> Submit </Button> </Form.Item> </Form> ); }; ``` 在这个例子,我们使用了Ant DesignForm、Input和Button组件来创建表单。在表单,我们定义了一个onFinish事件处理函数handleSubmit,当表单的所有表单项都通过验证时,该事件会被触发。在事件处理函数,我们可以获取到表单的值,并将其提交到服务器。 最后,我们将表单组件渲染到页面: ```js ReactDOM.render(<MyForm />, document.getElementById('root')); ``` 这是一个简单的例子,你可以根据自己的需求来添加更多的表单项和验证规则。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值