bee-form
Version:
Form ui component for react
117 lines (112 loc) • 4.79 kB
Markdown
# bee-form组件升级指南
>2.0.0版本的`bee-form`相较于之前版本的`bee-form`有较大的改动,此文通过登陆框的实现,说明旧版和新版的差别和升级方式
## 旧版`bee-form`的实现
```
class Demo2 extends Component {
checkForm = (flag,obj) => {
console.log(flag);
console.log(obj);
}
render() {
let cancel=()=>{
return (
<Button shape="border" className="cancel">取消</Button>
)
}
return (
<div className="demo2">
<Form submitCallBack={this.checkForm} afterSubmitBtn={cancel()}>
<FormItem showMast={true} labelName="用户名:" isRequire={true}
errorMessage="请输入用户名" method="blur" inline={true} valuePropsName='value'>
<FormControl name="username" placeholder="请输入用户名" />
</FormItem>
<FormItem showMast={true} labelName="密码:" isRequire={true}
method="blur" errorMessage="请输入密码"
inputAfter={<span className='forget'>忘记密码?</span>} inline={true} valuePropsName='value'>
<FormControl name="password" type="password" placeholder="请输入密码" />
</FormItem>
</Form>
</div>
)
}
}
```
## 新版`bee-form`的实现
```
class Demo2 extends Component {
submit = (e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (err) {
console.log('校验失败', values);
} else {
console.log('提交成功', values)
}
});
}
render() {
const { getFieldProps, getFieldError } = this.props.form;
return (
<div className="demo2">
<Form >
<FormItem>
<Label>用户名:</Label>
<FormControl placeholder="请输入用户名"
{...getFieldProps('username', {
validateTrigger: 'onBlur',
rules: [{
required: true, message: '请输入用户名',
}],
}) }
/>
<span className='error'>
{getFieldError('username')}
</span>
</FormItem>
<FormItem>
<Label>密码:</Label>
<FormControl placeholder="请输入密码" type='password'
{...getFieldProps('password', {
validateTrigger: 'onBlur',
rules: [{
required: true, message: '请输入密码',
}],
}) }
/>
<span className='error'>
{getFieldError('password')}
</span>
</FormItem>
<div className='submit'>
<Button colors="primary" className="login" onClick={this.submit}>登陆</Button>
<Button shape="border" className="reset">取消</Button>
</div>
</Form>
</div>
)
}
}
export default Form.createForm()(Demo2);
```
## 新版功能
>通过新旧版可以看出,新版有以下特点
- 不限定格式写法,用户随意变更
- 需要使用 `Form.createForm()(Demo2)` 包装
- 用户在任何时间任何位置都可以获得表单相关数据,更灵活
## 新版升级注意事项
- 不再有 `label` 相关配置
- 不再有栅格布局相关配置
- 必须使用 `Form.createForm()(Demo2)` 包装
- 使用 `getFieldProps`或者`getFieldDecorator` 处理表单元素
- 使用 `getFieldValue 、 getFieldsValue` 获得表单元素的值
- 使用 `setFieldsValue 、setFieldsInitialValue` 设置表单元素的值
- 使用 `validateFields` 校验表单
- 使用 `getFieldError、getFieldsError` 获得错误信息
- 使用 `rule` 设置校验规则
- 不得使用 `ref` 获得 `React` 组件,需要使用 `this.props.form.getFieldInstance` 代替,或者使用如下方法代替
```
<input {...getFieldProps('ref',{
ref: this.saveRef
})} />
```
更多实例请参考本组件demo或者 [rc-form](http://react-component.github.io/form/)