当前位置: 首页 > 知识库问答 >
问题:

寻找关于如何清理某些条件语句的建议

冀弘济
2023-03-14

在React中开发验证功能。我是一个新手,不想在学习的同时养成任何坏习惯,所以我正在寻找关于如何清理这里的代码块的建议。

该函数检查输入字段,如果它们为空,则将适当的消息附加到数组。检查所有输入字段后,如果该数组为空,则继续提交表单。如果该数组包含错误消息,则该消息将显示到屏幕(未显示)

validation = (event) => {
    event.preventDefault();
    let errors = []
    const {firstName, lastName, emailAddress, password, confirmPassword} = {...this.state}

    if(firstName.length === 0) errors.push('Please provide a value for First Name');
    if(lastName.length === 0) errors.push('Please provide a value for Last Name');

    if(password.length === 0){
      errors.push('Please provide a value for Password');
    }else if(password !== confirmPassword){
      errors.push('Passwords do not match');
    };

    if(emailAddress.length === 0) {
      errors.push('Please provide a value for Email Address');
    }else if(!emailRegex.test(emailAddress)){
      errors.push('Invalid email address');
    };

    this.setState({errors: errors})

    if(errors.length === 0) this.logIn()
  }

  logIn = () => {
    console.log('good to go')
  }; 

只是在寻找清理我的条件语句的方法,如果可能的话!谢谢

共有1个答案

聂华翰
2023-03-14

也许下面的内容就足够了。如果您提供了一个通用错误消息,如“Missing required value: ,而不是特定于字段的错误消息,则可以大大简化此操作。

您还希望进行手动检查,以确保password===confirmpassword,但我认为您能够解决这一问题。

const emailRegex = <your regex>;
const hasLength = val => val && val.length !== 0;

验证映射

const validators = {
  firstName: {
    validate: hasLength,
    message: 'Please provide a value for First Name'
  },
  lastName: {
    validate: hasLength,
    message: 'Please provide a value for Last Name'
  },
  password: {
    validate: hasLength,
    message: 'Please provide a value for Password'
  },
  emailAddress: [{
      validate: hasLength,
      message: 'Please provide a value for Email Address'
    },
    {
      validate: val => !emailRegex.test(val),
      message: 'Invalid email address'
    }
  ],
}    

验证器

validation = (event) => {
  event.preventDefault();
  let errors = []
  const state = {...this.state};

  Object
    .keys(state)
    .forEach(key => {
      let validator = validators[key];
      if (!validator) return;
      if (!Array.isArray(validator)) {
        validator = [validator]
      }
      validator.forEach(v => {
        if (!v.validate(state[key])) {
          errors.push(v.message)
        }
      })
    });

  this.setState({errors: errors})

  if (errors.length === 0) this.logIn()
}
 类似资料:
  • 我是一个完整的编程初学者,所以请原谅我的天真。 我想用Python制作一个程序,让我打印给定的数量的素数,其中由用户输入。我搜索了一下“for/while”循环,并做了一些修补。我运行了一个我在网上看到的程序,并修改了它来适应这个问题。代码如下: 如有任何澄清,将不胜感激。太感谢你们了!

  • 我的简化模式如下所示: 我想找到所有叫艾伦的人。我看了这个非常相似的问题,但它发现的是团队,而不是人。我想这里也是。即使我没有persons集合,是否有返回persons的查询? 我想我可以使用引用的技术找到团队,然后撤出他们的人员。我猜是这样的: 但是还有更直接的方法,对吗?

  • 我有一个方法,它做了相当多的验证,它正在发展失控。如果有任何关于如何最好地清理这种方法的建议,我将不胜感激。我使用的是Java 11,这个方法是spring boot微服务的一部分。

  • 错误处理 有些方法通通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。 推荐: NSError *error = nil; if (![self trySomethingWithError:&error]) { // Handle Error } 此外,一些苹果的 API 在成功的情况下会对 error 参数(如果它非 NULL)写入垃圾值(

  • 跟其它程序设计语言一样,Bash中的条件语句让我们可以决定一个操作是否被执行。结果取决于一个包在[[ ]]里的表达式。 条件表达式可以包含&&和||运算符,分别对应 与 和 或 。除此之外还有很多有用的表达式。 共有两个不同的条件表达式:if和case。 基元和组合表达式 由[[ ]](sh中是[ ])包起来的表达式被称作 检测命令 或 基元。这些表达式帮助我们检测一个条件的结果。在下面的表里,为

  • 条件语句体应该总是被大括号包围。尽管有时候你可以不使用大括号(比如,条件语句体只有一行内容),但是这样做会带来问题隐患。比如,增加一行代码时,你可能会误以为它是 if 语句体里面的。此外,更危险的是,如果把 if 后面的那行代码注释掉,之后的一行代码会成为 if 语句里的代码。 推荐: if (!error) { return success; } 不推荐: if (!error)