反应查询 useMutation onError 从未触发

mym*_*oto 9 javascript mutation typescript reactjs react-query

我目前正在我的项目中尝试react-query。

我在处理突变中的错误时遇到了麻烦。

在我的网络选项卡中,我可以确认服务器正在响应代码 400 或 500,我认为这会使 axios 抛出错误,从而触发定义的 onError 函数。

但是,无论 API 调用如何进行,onSuccess 函数始终会被调用。

我在这里缺少什么?提前致谢。

const { mutate } = useMutation(
['mutation'],
() => axios.patch(API_URL, params),
{
  onSuccess: () => {
    //this is always fired, even when response code is 400, 500, etc.
    void queryClient.invalidateQueries('query');
  },
  onError: () => {
    //should do something but never fired
  },
}
Run Code Online (Sandbox Code Playgroud)

);

小智 -7

这可能是因为您按旧顺序传递参数。在文档中它说你应该按如下方式调用它:

useMutation(mutationFn, {
   mutationKey,
   onError,
   onMutate,
   onSettled,
   onSuccess,
   retry,
   retryDelay,
   useErrorBoundary,
   meta,
 });
Run Code Online (Sandbox Code Playgroud)

这使得您的代码如下:

useMutation(
() => axios.patch(API_URL, params),
{
  mutationKey: 'mutation',
  onSuccess: () => {
    //this is always fired, even when response code is 400, 500, etc.
    void queryClient.invalidateQueries('query');
  },
  onError: () => {
    //should do something but never fired
  },
}
Run Code Online (Sandbox Code Playgroud)

  • 键的顺序与对象无关。 (2认同)