我有以下代码,我试图决定如何处理错误:
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 回答
你最好的选择是使用https://www.npmjs.com/package/apollo-link-error和你的Apollo客户端 . 这将允许您处理错误并根据这些错误应用您需要的任何自定义逻辑 . 它应该允许您保留组件中的
.catch
. 实际上这个模块在Apollo的documentation中被推荐