【问题标题】:How to loop through validation errors from server如何遍历来自服务器的验证错误
【发布时间】:2020-03-06 11:39:30
【问题描述】:

我正在使用 Node.js 在服务器上执行验证并将响应发送回客户端

try {
  const response = await register(user);
  console.log(response);
} catch (ex) {
  if (ex.response && ex.response.status === 422) {
    const errors = ex.response.data.errors;
    this.setState({ errors });
  }
}

如果我 console.log(this.state.errors) 我得到:

(5) [{…}, {…}, {…}, {…}, {…}]
0: {name: "Name required"}
1: {name: "Name should be more than 3 characters"}
2: {email: "Invalid email address"}
3: {password: "Password required"}
4: {password: "Password should be at least 6 characters"}
length: 5
__proto__: Array(0)

然后我想遍历所有错误并将它们显示在一个下方。

     {this.state.errors &&
        this.state.errors.map(error => <li>{error}</li>)}

但我收到一条错误消息:

this.state.errors.map 不是函数

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    显然有时ex.response.data.errors 不是一个数组,可能是一个对象。 我建议您不仅要检查this.state.errors 是否存在,还要确保它是一个数组。

    {Array.isArray(this.state.errors) &&
        this.state.errors.map(error => <li>{error.name}</li>)}
    

    【讨论】:

    • 感谢您的回答。当我使用您的代码后提交表单时,我得到这个:错误:Objects are not valid as a React child (found: object with keys {name}). If you meant to render a collection of children, use an array instead.
    • @user10980228 我已经编辑了我的答案。只需将{error} 替换为{error.name}
    • 谢谢,这适用于名称。但它没有列出电子邮件和密码错误。有没有办法只使用 {error} 列出所有错误而不必执行 {error.name}、{error.email} 和 {error.password}
    • @user10980228 你可以例如统一 API 端的错误,使其返回字符串数组,而不是对象数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多