设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

【React深入】从Mixin到HOC再到Hook(8)

发布时间:2019-04-11 17:31 所属栏目:21 来源:ConardLi
导读:上面的代码只是简略的一部分,除了input,我们还可以将HOC应用在select等其他表单组件,甚至还可以将上面的HOC兼容到span、table等展示组件,这样做可以大大简化代码,让我们省去了很多状态管理的工作,使用如下:

上面的代码只是简略的一部分,除了input,我们还可以将HOC应用在select等其他表单组件,甚至还可以将上面的HOC兼容到span、table等展示组件,这样做可以大大简化代码,让我们省去了很多状态管理的工作,使用如下:

  1. export default class extends Component {  
  2.   render() {  
  3.     return (  
  4.       <Form >  
  5.         <Input v_model="name"></Input>  
  6.         <Input v_model="pwd"></Input>  
  7.       </Form>  
  8.     )  
  9.   }  

表单校验

基于上面的双向绑定的例子,我们再来一个表单验证器,表单验证器可以包含验证函数以及提示信息,当验证不通过时,展示错误信息:

  1. function validateHoc(WrappedComponent) {  
  2.   return class extends Component {  
  3.     constructor(props) {  
  4.       super(props);  
  5.       this.state = { error: '' }  
  6.     }  
  7.     onChange = (event) => {  
  8.       const { validator } = this.props;  
  9.       if (validator && typeof validator.func === 'function') {  
  10.         if (!validator.func(event.target.value)) {  
  11.           this.setState({ error: validator.msg })  
  12.         } else {  
  13.           this.setState({ error: '' })  
  14.         }  
  15.       }  
  16.     }  
  17.     render() {  
  18.       return <div>  
  19.         <WrappedComponent onChange={this.onChange}  {...this.props} />  
  20.         <div>{this.state.error || ''}</div>  
  21.       </div>  
  22.     }  
  23.   }  
  24. }  
  1. const validatorName = {  
  2.   func: (val) => val && !isNaN(val),  
  3.   msg: '请输入数字'  
  4. }  
  5. const validatorPwd = {  
  6.   func: (val) => val && val.length > 6,  
  7.   msg: '密码必须大于6位'  
  8. }  
  9. <HOCInput validator={validatorName} v_model="name"></HOCInput>  
  10. <HOCInput validator={validatorPwd} v_model="pwd"></HOCInput> 

当然,还可以在Form提交的时候判断所有验证器是否通过,验证器也可以设置为数组等等,由于文章篇幅原因,代码被简化了很多,有兴趣的同学可以自己实现。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读