0

这与这个问题有关: 在反应查询中处理未经授权的请求

我理解 React-Query 不关心响应代码的观点,因为没有错误。因此,例如,如果服务器以 400“错误请求”响应,我是否必须检查 muate 函数返回的数据?

 const handleFormSubmit = async (credentials) => {
    const data = await mutateLogin(credentials);
    //  Do i have to check this data if for example i wanna show an error message 
    // "Invalid Credentials"?
 };

我需要将用户保存在缓存中。

const useMutateLogin = () => {
  return useMutation(doLogin, {
  throwOnError: true,
  onSuccess: data => // Do i have to check here again if i receive the user or 400 code
  })
 }

谢谢。

4

1 回答 1

1

react-query不处理请求,只要你有一个Promise ,它就完全不知道你用什么来制作它们。从文档中,我们对查询功能有以下规范:

必须返回一个将解析数据或引发错误的承诺。

因此,如果您需要在特定状态代码上失败,您应该在查询函数中处理它。

混乱的出现是因为流行的库通常会为您处理这些问题。例如,如果 HTTP 状态码超出 2xx 的范围, axiosjQuery.ajax()将抛出错误/拒绝。如果您使用Fetch API(如您发布的链接中的讨论),API 不会拒绝 HTTP 错误状态。

您的第一个代码段:

const handleFormSubmit = async (credentials) => {
    const data = await mutateLogin(credentials);
 };

的内容data取决于mutateLogin功能实现。如果您使用axios,则 Promise 将拒绝任何超出 2xx 范围的 HTTP 状态代码。如果您使用Fetch API,您需要检查状态并抛出错误,或者react-query将接收到的整个响应缓存起来。

您的第二个代码段:

const useMutateLogin = () => {
  return useMutation(doLogin, {
  throwOnError: true,
  onSuccess: data => // Do i have to check here again if i receive the user or 400 code
  })
 }

这里我们有和以前一样的情况。这取决于doLogin实施。

于 2020-11-08T20:51:10.260 回答