Reactjs 如何重置Apollo客户端的挂接程序
我正在开发一种React形式,它与使用of的GraphQL突变相关联。在服务器上,我执行一些验证,如果出现错误,我拒绝变异。在客户端,我使用Reactjs 如何重置Apollo客户端的挂接程序,reactjs,graphql,apollo,react-apollo,apollo-client,Reactjs,Graphql,Apollo,React Apollo,Apollo Client,我正在开发一种React形式,它与使用of的GraphQL突变相关联。在服务器上,我执行一些验证,如果出现错误,我拒绝变异。在客户端,我使用error对象来接收验证错误。我的钩子看起来像这样: const [addDrone, { error }] = useMutation(ADD_DRONE) 因此,我将error对象解包,并在一个对话框中将其呈现给用户,让他/她知道哪里出了问题。在用户取消对话框后,我想让用户有机会修复错误,以便他/她可以重新提交表单。这就是事情变得棘手的地方。当用户解除
error
对象来接收验证错误。我的钩子看起来像这样:
const [addDrone, { error }] = useMutation(ADD_DRONE)
因此,我将error
对象解包,并在一个对话框中将其呈现给用户,让他/她知道哪里出了问题。在用户取消对话框后,我想让用户有机会修复错误,以便他/她可以重新提交表单。这就是事情变得棘手的地方。当用户解除对话框时,我想清除错误
对象,但由于此变量来自usemotation
钩子,因此我无法对其进行变异或重置。看起来useVaritation
被设计为只发射一次,不再使用
所以我的问题是,有没有办法“重置”一个
useMutation
挂钩回到它的原始状态?从2020年12月26日起,没有办法重置一个useMutation
,但是阿波罗功能请求repo上有两个功能请求请求一个,因此这在未来可能会改变
现在实现此行为的最简单方法是删除error
变量,并改用处理程序。这是由使用相同的error
对象的usemotation
提供的回调。然后,您可以将其连接到您自己的有状态变量,这将为您提供完全相同的error
变量以及使用setError
清除该变量的能力。请参见下面的示例:
const [error, setError] = React.useState(null)
const [addDrone] = useMutation(ADD_DRONE, {
onError: setError,
})
如果您希望同时重置数据
对象,则可以引入另一个有状态元组[data,setData]
,并将setData
连接到onCompleted
回调