首页 文章

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

提问于
浏览
0

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

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 param更新组件的数据,但我看不到处理错误的等效方法 .

理想情况下,我想在 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 回答

  • 0

    你最好的选择是使用https://www.npmjs.com/package/apollo-link-error和你的Apollo客户端 . 这将允许您处理错误并根据这些错误应用您需要的任何自定义逻辑 . 它应该允许您保留组件中的 .catch . 实际上这个模块在Apollo的documentation中被推荐

相关问题