Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript react和apollo中graphql变异挂钩的错误处理不工作_Javascript_Reactjs_Graphql_Apollo Client - Fatal编程技术网

Javascript react和apollo中graphql变异挂钩的错误处理不工作

Javascript react和apollo中graphql变异挂钩的错误处理不工作,javascript,reactjs,graphql,apollo-client,Javascript,Reactjs,Graphql,Apollo Client,我似乎在代码中遗漏了一个配置,但似乎找不到我做错了什么 我们有一个简单的登录表单。 如果输入了正确的用户名和密码,则没有问题,应用程序将继续工作。 但是,如果输入了错误的用户名或密码,Apollo会在DOM上抛出一个错误。“login”函数包装在try-catch块中,但错误仍然显示在DOM上 请参见下面的屏幕截图: const LoginForm=()=>{ const classes=useStyles(); const[inputData,setInputData]=useState()

我似乎在代码中遗漏了一个配置,但似乎找不到我做错了什么

我们有一个简单的登录表单。 如果输入了正确的用户名和密码,则没有问题,应用程序将继续工作。
但是,如果输入了错误的用户名或密码,Apollo会在DOM上抛出一个错误。“login”函数包装在try-catch块中,但错误仍然显示在DOM上

请参见下面的屏幕截图:

const LoginForm=()=>{
const classes=useStyles();
const[inputData,setInputData]=useState();
常量{寄存器,错误}=useForm({
模式:“onBlur”,
validationSchema:LoginSchema,
});
const[login,{data,error}]=使用变异(login\u变异{
错误策略:“所有”,
});
常量handleLogin=(e)=>{
试一试{
e、 预防默认值();
登录({
变量:{
标识符:inputData.email,
密码:inputData.password,
},
});
}捕捉(错误){
log(“有一个错误”);
}
};
如果(错误){
log(“ERRORSSSS:,error.graphQLErrors”);
返回误差;
}else if(数据){
控制台日志(数据);
}
常量handleInput=(e)=>{
setInputData({…inputData,[e.target.name]:e.target.value});
};
返回(
);
};
注: -我们的后端使用Strapi3.0.1 -以下是我们的Apollo客户端设置:

const errorLink=onError(
({graphQLErrors,networkError,response,operation})=>{
如果(图形错误){
如果(operation.operationName==“IgnoreErrorsQuery”){
response.errors=未定义;
}
graphQLErrors.map({message,locations,path})=>{
console.log(
`[GraphQL错误]:消息:${Message},位置:${locations},路径:${Path}`
);
});
}
if(networkError)console.log(`[networkError]:${networkError}`);
}
);
const httpLink=新的httpLink({uri:http://localhost:1337/graphql" });
const-link=ApolloLink.from([errorLink,httpLink]);
const客户端=新客户端({
链接
缓存:新的InMemoryCache(),
});

控制台告诉我们有一个未兑现的承诺。您的登录功能是一个承诺,因此您需要使用then/catch。像这样:

const handleLogin = (e) => {

  e.preventDefault();
  login({
    variables: {
      identifier: inputData.email,
      password: inputData.password,
    },
  })
  .then(v => console.log(v))
  .catch(e => console.log(e))

})

尝试在选项中添加
onError
处理程序
usemotation
,示例:
onError:(错误)=>console.log(错误)
@NikitaMadeev,非常感谢。它起作用了!谢谢,这很有效!也我测试了您的方法、Nikita Madeev的方法和另一个async/await方法。工作起来很有魅力。再次感谢你