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

Apollo客户端突变错误和更新组件

荀学文
2023-03-14

我有以下代码,我正在尝试决定如何处理错误:

const gqlWrapper = graphql(registerMutation, {
    props: ({ mutate, ownProps }) => ({
        registerUser: userDetails => {
            mutate({
                variables: { ...userDetails },
                update: (proxy, resp) => {
                    // perform update to local state based on success
                }
            }).catch(err => {
                console.log(err);
                // how to update components from here?
            });
        }
    })
});

export default gqlWrapper(Register);

服务器发回一个GraphQL错误对象,并将其发回,使其出现在突变的catch()块中。如果变异成功,组件的数据将使用proxy参数更新,但我看不到处理错误的等价方法。

理想情况下,我希望更新catch块中的Apollo缓存,但在这一点上,我甚至不能向组件或状态注入道具。

最终的结果是在Register组件上设置一个prop/state,它显示了一个带有条件呈现的错误消息组件。一种方法可以是处理registerUser突变产生的错误:

// Where the registerUser mutation get's initiated - on form submit
onSubmit={() => {
    this.props.registerUser(values);
    // the error could be caught here but I don't want this in the UI - I'd rather keep all this outside
}}

但我觉得这增加了UI的体积,我宁愿在页面底部,旁边的突变函数。有什么办法来解决这个问题,还是我错过了一些明显的东西?

谢谢!

共有1个答案

云京
2023-03-14

您最好在Apollo客户机中使用https://www.npmjs.com/package/apollo-link-error。这将允许您处理错误,并根据这些错误应用所需的任何自定义逻辑。它还允许您将.catch排除在组件之外。实际上,Apollo的文档中推荐了这个模块

 类似资料:
  • 我在服务器上使用GraphQL和mongoose。 当发生验证错误时,GraphQL突变发送状态代码为200的响应。在客户端,响应如下所示: 我想使用阿波罗客户端突变promise的功能访问验证错误。类似: 如何做到这一点?

  • 在后端,我进行了调试,并收到了请求,它根据客户机上设置的令牌查找用户,但随后什么也不做,只在我试图从应用程序发送时返回给我400,在graphiql浏览器上。 我错过了什么?非常感谢。

  • 我目前使用vue-apollo包为Apollo客户机,使用VueJs堆栈,使用django和graphene-python为我的GraphQl API。 下面是vue-apollo的一个简单设置: 返回以下错误响应: 然而,在我的vue应用程序中,常规查询可以很好地解决正确的响应,除了突变,所以这让我真的很困惑

  • 我正在为Angular练习&。 我在从客户端创建查询时遇到了问题。 我已经成功地在后端创建了graphql查询。 无法找到解决方案答案。请帮忙。

  • 假设Component-TODOList需要以两种不同的方式显示TODO的列表,listview和gridview。假设我想保持两个视图作为不同的组件,那么最佳实践是什么- > 使用graphql查询创建TodoList组件,然后将查询结果传递给TODOListView和TODOGridView组件? 创建没有graphql查询的TodoList组件,然后在ToDoListView和TODOGri

  • 代码如下 我已经创建了一个DynamoDB表我的主键是,它是字符串。 在DynamoDB中,的表值是我需要更新为David。上面是代码。为什么错误会抛出元模式 完整错误如下所示 “errorMessage”:“调用UpdateItem操作时发生错误(ValidationException):更新表达式中提供的文档路径对于更新无效”,“errorType”:“ClientError”, 在代码下面尝