在反应组件中添加多个验证

Adding multiple validation in react component

我正在使用一个教程反应组件,其中验证是在组件中烘焙的。我遇到了问题,我只能进行一种类型的验证,但我想进行多次验证。

我的组件的渲染是

    <Input
          hintText={this.props.hinttext}
          placeholder={this.props.placeholder}
          value={this.state.value}
          onChange={this.onChange}
        />

onChange方法是这样的

  onChange = (evt) => {
    const name= this.props.name;
    const value = evt.target.value;
    const error = this.props.validate ? this.props.validate(value) : false;
    this.setState({value, error});
    this.props.onChange({name, value, error});
  }

现在我通过以下方法在我的表单中使用它

          <Field
            placeholder="Email"
            name='email'
            value={this.state.fields.email}
            onChange={this.onInputChange}
            validate={(val) => (isEmail(val) ? false: 'Invalid Email')}
          />

这将验证电子邮件,如果我需要其他类型的验证,我可以像下面这样更改验证

            validate={(val) => (val ? false : 'Name Required')}

一切正常,但我想为一个字段定义两个验证,我注意到它是箭头函数,我应该添加多个值但不确定如何去做,因为我不擅长 ES6。任何建议。

您可以尝试 运行 自定义验证器,其中包含您需要的验证,如下所示

function validator(val) {
  this.error = [];
  this.val = val;
  this.isRequired = function(){
    if (!this.val) {
      this.error.push('This field is required');
    }
    return this;
  }
  this.isEmail = function() {
   const filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   if (this.val && !filter.test(this.val)) {
      this.error.push('Invalid Email');
   }
   return this;
  }
  return this;
}

并在验证属性中调用验证器

<Field
    placeholder="Email"
    name='email'
    value={this.state.fields.email}
    onChange={this.onInputChange}
    validate={(val) => new validator(val).isRequired().isEmail().error}
/>