javascript - 未处理的拒绝(TypeError):无法读取未定义的属性“扩展”。(GraphQL)
问题描述
我将 GraphQL 与 MERNG 一起使用,但出现以下错误:未处理的拒绝(TypeError):无法读取未定义的属性“扩展”。请帮帮我。我还重新安装了graphql。这是发生错误的行: setErrors(err.graphQLErrors[0].extensions.exception.errors);
这是我的 Register.js 文件:
import React, {
useState
} from 'react'
import {
Button,
Form
} from 'semantic-ui-react'
import gql from 'graphql-tag'
import {
useMutation
} from '@apollo/react-hooks'
function Register() {
const [errors, setErrors] = useState({});
const [values, setValues] = useState({
username: '',
email: '',
password: '',
confirmPassword: ''
})
const onChange = (event) => {
setValues({ ...values,
[event.target.name]: event.target.value
});
}
const [addUser, {
Loading
}] = useMutation(REGISTER_USER, {
update(proxy, result) {
console.log(result);
},
onError(err) {
console.log(err.graphQLErrors[0].extensions.exception.errors);
setErrors(err.graphQLErrors[0].extensions.exception.errors);
},
variables: values
})
const onSubmit = (event) => {
event.preventDefault();
addUser();
}
return ( <
div className = "form-container" >
<
Form onSubmit = {
onSubmit
}
noValidate >
<
h1 > Register < /h1> <
Form.Input label = "Username"
placeholder = "Username"
name = 'username'
type = "text"
value = {
values.username
}
onChange = {
onChange
}
/> <
Form.Input label = "Email"
placeholder = "Email"
name = 'email'
type = "email"
value = {
values.email
}
onChange = {
onChange
}
/> <
Form.Input label = "Password"
placeholder = "Password"
name = 'password'
type = "password"
value = {
values.password
}
onChange = {
onChange
}
/> <
Form.Input label = "Confirm Password"
placeholder = "Confirm Password"
name = 'confirmPassword'
type = "password"
value = {
values.confirmPassword
}
onChange = {
onChange
}
/> <
Button type = "submit"
primary >
Register <
/Button> <
/Form> {
Object.keys(errors).length > 0 && ( <
div className = "ui error message" >
<
ul className = "list" > {
Object.values(errors).map(value => ( <
li key = {
value
} > {
value
} < /li>
))
} <
/ul> <
/div>
)
} <
/div>
)
}
const REGISTER_USER = gql `
mutation register(
$username: String!
$email: String!
$password: String!
$confirmPassword: String!
){
register(
RegisterInput: {
username: $username
email: $email
password: $password
confirmPassword: $confirmPassword
}
){
id email username createdAt token
}
}
`
export default Register;
解决方案
它建议err.graphQLErrors[0]
未定义的清除,如果您不想要未定义的错误,您可以执行以下操作:
setErrors(err&&err.graphQLErrors[0]?err.graphQLErrors[0].extensions.exception.errors:{});
推荐阅读
- python - 如何在 TF 2.2 中创建自定义 PreprocessingLayer
- vb.net - 如何在 VB.NET 中将浮点数转换为十六进制?
- rust - 为什么 `std::i64::MIN..=-1i64` 和 `1i64..=std::i64::MAX` 没有包含在我的模式中?
- file - 从 Vue CLI 项目文件夹下载 .pdf 文件
- amazon-web-services - AWS Batch 作业陷入可运行状态
- linux - 不同进程的线程之间的通信是否有保护机制?
- sql - 如何在 SQL Server 中合并两个表
- php - 如何根据屏幕大小使用 CSS 更改正文背景,以及是否存在 PHP 文件?
- laravel - 错误“此路由不支持 PATCH 方法。支持的方法:GET、HEAD、POST。”更新方法
- macos - zsh sed 用特殊字符扩展变量并保留它们