设置value值错误
getFieldDecorator will override value
Warning: getFieldDecorator
will override value
, so please don’t set value
directly and use setFieldsValue
to set it
- 通过 getFieldDecorator 绑定的表单不能设置 value属性
- getFieldDecorator() 方法包装后的组件,会自动更新表单组件的value以及onChange事件
- 无需再手动添加value属性,删除组件中定义的 value
- 手动添加value属性才导致Warning的发生
- 填写初始默认值可使用initialValue进行设置 ```jsx // 错误的用法 {getFieldDecorator(‘name’, { initialValue: state.name, rules: [{ required: true, message: ‘请输入名称’ }], })()}
// 正确的用法
- 使用 Form.create()(App) 之后的component 会接收到一个props.form
- 使用 **props.form**下的一系列方法,表单就具备自动校验功能的表单
- 受控组件,能自动的绑定 value和 onChange
<a name="FSRd2"></a>
### 自定义组件
SelectApp自定义组件内部不要用 PropTypes.defaultProps = {} 验证 value的值<br />通过解构赋值的方式,设置 默认值
```jsx
import React, { useEffect, useState, memo } from 'react';
import PropTypes from 'prop-types';
SelectApp.propTypes = {
// value: PropTypes.oneOfType([PropTypes.number, PropTypes.object]);
onChange: PropTypes.func,
labelInValue: PropTypes.bool,
allowClear: PropTypes.bool,
};
SelectApp.defaultProps = {
// value: undefined,
onChange: () => {},
labelInValue: false,
allowClear: false,
};
function SelectApp({value = undefined, onChange}) {
return (<Select />)
}
父组件调用
<Form.Item label="名称">
{getFieldDecorator('name', {
initialValue: state.id ? { key: value.id } : undefined,
rules: [{ required: true, message: '请输入名称' }],
})(<SelectApp labelInValue />)}
</Form.Item>