antd 踩坑指北

antd 是一个 react 的组件库,最近在做一个后台系统,UI 组件库使用到了 antd,以及基于 Ant Design 而开发的模板组件 - procomponents,记录一些踩过的坑,希望对新手朋友们有帮助。老司机就不用看了。

Q1 - Form 中,使用表单组件的 defaultValue 属性设置默认值后,onFinish 方法获取的值为 undefined ,而不是设置的默认值。

import React, { Component } from 'react'
import { Form, Select, Button } from 'antd'

const MyForm = () => {
    const onFinish = value => { 
      console.log(value) // {like: undefined}
    }

    return (
        <Form onFinish={this.onFinish}>
          <Item name='like' label='日常爱好'>
            <Select defaultValue='写 bug'> 
              <Option value='写 bug'>写代码</Option> 
              <Option value='搬砖'>搬砖</Option> 
            </Select> 
          </Item> 
          <Item> 
            <Button type='primary' htmlType='submit'>提交</Button> 
          </Item> 
        </Form>
    )
}

export default MyForm
复制代码

解决方法: 使用 Form 组件上的 initialValues 属性去设置表单字段的默认值,initialValues 属性值的类型为对象。

import React, { Component } from 'react'
import { Form, Select, Button } from 'antd'

const MyForm = () => {
    const onFinish = value => { 
      console.log(value) // {name: undefined, like: undefined}
    }

    return (
        <Form 
            onFinish={this.onFinish} 
            initialValues={{ name: 'harry_yang', like: '写 bug' }}
        >
          <Item name='like' label='日常爱好'>
            <Select defaultValue='写 bug'> 
              <Option value='写 bug'>写代码</Option> 
              <Option value='搬砖'>搬砖</Option> 
            </Select> 
          </Item> 
          <Item> 
            <Button type='primary' htmlType='submit'>提交</Button> 
          </Item> 
        </Form>
    )
}

export default MyForm
复制代码

Q2 - modal-form 高级表单,编辑时无法给表单项赋值

modal-form 高级表单 想要新建和编辑共用一个表单组件 modal-form ,从官网文档上查到,可以使用 initialValues 设置默认值,按理来说设置 initialValues 就可以用于编辑功能,但是。。。发现编辑时通过 form.setFieldsValue(initialValues) 无法赋值成功。

image.png

解决方法: 弃用 modal-form , 换用基础表单组件 Form

Guess you like

Origin juejin.im/post/7032246446594195470