React中GraphQL查询Hook在错误场景下返回结果与浏览器网络面板不一致,无法获取响应数据
React中GraphQL查询Hook在错误场景下返回结果与浏览器网络面板不一致,无法获取响应数据
这种情况我之前也碰到过!核心原因是你的GraphQL客户端(大概率是React生态里最常用的Apollo Client)默认的错误处理策略把部分成功的响应当成了完全失败,所以自动把data设为undefined,但实际上GraphQL规范是允许响应同时返回errors和data的(也就是部分数据成功返回的场景)。
解决方法很简单,只需要在你的查询Hook里配置errorPolicy选项:
具体配置示例
假设你用的是useQuery Hook,修改代码如下:
import { useQuery } from '@apollo/client'; import YOUR_QUERY from './your-query-document'; const YourComponent = () => { const { data, error, loading } = useQuery(YOUR_QUERY, { // 关键配置:设置errorPolicy为"all" errorPolicy: "all", // 其他配置比如variables之类的保持不变 variables: { /* 你的查询变量 */ } }); if (loading) return <div>加载中...</div>; // 现在即使有error,data也会正常返回 if (data) { console.log('拿到返回的部分数据:', data.elements); } if (error) { console.log('处理GraphQL错误:', error.graphQLErrors); } return <div>你的组件内容</div>; };
关于errorPolicy的三个可选值
none(默认值):只要响应里有errors,就把data设为undefined,并抛出错误ignore:忽略响应里的errors,正常返回data,不会抛出错误all:同时保留data和errors,既返回数据也把错误信息传递给你,这是最适合你当前场景的选项
设置之后,你Hook返回的data就会和浏览器网络面板里的内容一致,同时error.graphQLErrors也会保留所有的错误信息,完美解决你的问题!
备注:内容来源于stack exchange,提问作者FE-P
相关产品推荐
相关产品推荐

