基于antd 3.26.16版本中,使用hook,新增弹窗使用form表单遇到的问题
1.首先导出时候需要加上Form.create
正确:export default Form.create({name: 'sourceDialog'})(SourceDialog);
错误:export default SourceDialog;
2.在编写表单时,Radio组件设置defaultValue报错
报错:Warning: `defaultValue` is invalid for `getFieldDecorator` will set `value`, please use `option.initialValue` instead.
错误代码:
<Form.Item label='模式'>
{getFieldDecorator('method', {
initialValue: sourceForm.method,
rules: [{required: true, message: '请选择模式'}],
})(
<Radio.Group defaultValue={sourceForm.method} onChange={(val) => {
setSourceForm({
...setSourceForm,
method: val,
})
}}>
{tableKeys.map((item) =>
<Radio.Button value={item.name} key={item.key}>{item.name}</Radio.Button>
)}
</Radio.Group>
)}
</Form.Item>
正确代码:
<Form.Item label='模式'>
{getFieldDecorator('method', {
initialValue: sourceForm.method,
rules: [{required: true, message: '请选择模式'}],
})(
<Radio.Group onChange={(val) => {
setSourceForm({
...setSourceForm,
method: val,
})
}}>
{tableKeys.map((item) =>
<Radio.Button value={item.name} key={item.key}>{item.name}</Radio.Button>
)}
</Radio.Group>
)}
</Form.Item>
总结:Form.Item 子组件的 defaultValue 参数都要被 getFieldDecorator 中的 initialValue 替换。
3.在组件Switch中设置报错
报错:[antd: Switch] `value` is not validate prop, do you mean `checked`?
错误代码:
<Form.Item label='kerberos认证'>
{getFieldDecorator('kerberos', {
initialValue: sourceForm.kerberos,
})(
<Switch checkedChildren="是" unCheckedChildren="否" disabled={disabled} />
)}
</Form.Item>
正确代码:
<Form.Item label='kerberos认证'>
{getFieldDecorator('kerberos', {
initialValue: sourceForm.kerberos,
valuePropName: 'checked'
})(
<Switch checkedChildren="是" unCheckedChildren="否" disabled={disabled} />
)}
</Form.Item>
总结:发现在getFieldDecorator包裹下的Switch组件无法显示为true的状态,Switch组件是通过checked的属性来显示状态的,所以需要一个额外的属性valuePropName