antd-form

https://blog.csdn.net/kelly0721/article/details/87382909
https://blog.csdn.net/deng1456694385/article/details/86090884
ju.outofmemory.cn/entry/348216

  1. import React from 'react';
  2. import {
  3. Row, Col, Form, DatePicker, Select, Button, Checkbox, Table, Switch, Input
  4. } from 'antd';
  5. const { Option } = Select;
  6. const FormItem = Form.Item;
  7. const formItemLayout = { // label 和input宽度
  8. labelCol: { span:6 },
  9. wrapperCol: { span: 18 },
  10. };
  11. function UserForm(props) {
  12. const { getFieldDecorator, resetFields, validateFields } = props
  13. function onSubmit() {
  14. //获取所以输入框的值(value),并且获取到输入框是否报错
  15. validateFields((error, value)=> {
  16. console.log(error, value)
  17. })
  18. }
  19. function onClear() {
  20. resetFields()
  21. }
  22. return (
  23. <Form {...formItemLayout}>
  24. <Form.Item label="数值类型">
  25. {getFieldDecorator(`rule[${index}].name`, {
  26. initialValue: item.name,
  27. rules: [
  28. { required: true, message: "请选择用户" },
  29. ],
  30. })(
  31. <Select placeholder="请选择用户">
  32. <Option value="1">lucy</Option>
  33. <Option value="2">gaode</Option>
  34. </Select>
  35. )}
  36. </Form.Item>
  37. <FormItem {...formItemSwitch} label="包含不可用品种">
  38. {getFieldDecorator('flag',{
  39. valuePropName: 'checked',
  40. initialValue: false,
  41. })(
  42. <Switch checkedChildren="是" unCheckedChildren="否" />
  43. ) }
  44. </FormItem>
  45. </Form>
  46. )
  47. }
  48. export default Form.create()(UserForm)

getFieldDecorator

getFieldDecorator是一个方法,这个方法接收两个参数,第一个是表单的字段对象,第二个是验证规则。这个方法本身返回一个方法,需要将需要获取值的标签包裹进去

  1. initialValue的值会覆盖子组件中的placeHolder
  2. getFieldValue不能获取没有使用getFieldDecorator绑定的控件
    1. 如果控件值标注了id属性,用这个方法无效
    2. 用 document.getElementById(“id名”).value的方式进行获取值
      1. <From>
      2. <FormItem>
      3. //JS代码书写时需要用 { } 包裹起来,不能直接写在代码块中
      4. {
      5. getFieldDecorator('name',{
      6. initialValue:'lucy',
      7. rules:[]
      8. })(
      9. <Input placeholder='请输入用户名'/>
      10. )
      11. }
      12. </FormItem>
      13. </From>

错误的 getFiledDecorator写法

使用 getFiledDecorator注册的组件最外层必须是绑定的组件,
如果你写成这样的话使用 setFieldsValue是无效的

  1. <Form.Item label="名称">
  2. {getFieldDecorator('name')(
  3. <div> // 多余的 div
  4. <Input
  5. className={styles.input}
  6. placeholder="请输入名称"
  7. />
  8. <span>字数限制</span>
  9. </div>
  10. )}
  11. </Form.Item>

获取表单的数据

  1. form.getFieldValue('data')
  2. form.getFieldsValue()

设置表单的数据

getValueFromEvent

setFieldsValue设置当前的form中正在输入的input值
options.getValueFromEvent解决了,它可以把 onChange 的参数(如 event)转化为控件的值

  1. <Form.Item>
  2. {getFieldDecorator('name', {
  3. rules: [{ required: true, message: 'Please input your username!' }],
  4. getValueFromEvent: e => {
  5. // 进行你想要的操作
  6. return e;
  7. }
  8. })(
  9. <Input />
  10. )}
  11. </Form.Item>

清除表单的值

  1. this.props.form.resetFields();

antd动态表单

Object对象格式
{0: {name: ‘lucy’}, 1: {name: ‘gaode’} }

  1. // form.getFieldValue('rule') 是对象格式 {0: {}, 1: {} }
  2. <Form.Item label="数值类型">
  3. {getFieldDecorator(`rule.${index}.name`, {
  4. initialValue: item.type,
  5. rules: [
  6. { required: true, message: "请选择用户" },
  7. ],
  8. })(
  9. <Select placeholder="请选择用户">
  10. <Option value="1">lucy</Option>
  11. <Option value="2">gaode</Option>
  12. </Select>
  13. )}
  14. </Form.Item>

Array 数组对象格式,用
[{name: ‘lucy’}, {name: ‘gaode’} ]

  1. // form.getFieldValue('rule') 数组格式 [{},{}]
  2. <Form.Item label="数值类型">
  3. {getFieldDecorator(`rule[${index}].name`, {
  4. initialValue: item.name,
  5. rules: [
  6. { required: true, message: "请选择用户" },
  7. ],
  8. })(
  9. <Select placeholder="请选择用户">
  10. <Option value="1">lucy</Option>
  11. <Option value="2">gaode</Option>
  12. </Select>
  13. )}
  14. </Form.Item>

refs

Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
image.png
package.json install rc-util

  1. "rc-util": "^5.0.6",

参考
https://github.com/ant-design/ant-design/issues/25802

rc-form

  1. rc-form http://react-component.github.io/form

redux-form

rf.jpg