第一次 api 调用时 RTK 查询 isSuccess 始终为 false

Nut*_*nta 1 reactjs redux redux-toolkit rtk-query

所以我正在对Blur 进行表单验证,并使用RTK 查询来调用api。我面临的问题是,在第一次 API 调用时,isSuccess即使 API 返回状态为 200,也会返回 false

const [validateUser, { data, isSuccess }] = authAPI.useValidateUserMutation();
  const validateUserDetails = (name, event) => {
    event.preventDefault();
    if (event.target.value !== "") {
      let fieldData = {
        fieldName: name,
        value: event.target.value,
      };
      validateUser(fieldData);
      console.log("Is Success: ", isSuccess);
      if (isSuccess && data.errors.status !== 200) {
        console.log(data);
      }
    } else {
    }
  };
Run Code Online (Sandbox Code Playgroud)

第一次验证时 在此输入图像描述

即使状态是 API 状态是 200 成功也会返回 false 但现在如果我再次执行它将返回 true 在此输入图像描述 有办法解决这个问题吗?

phr*_*hry 5

您在这里引用的变量是在执行之前isSuccess由渲染关闭创建的变量。因此,在未来的某个时刻,整个组件将重新渲染并创建一个新的闭包。在这个新的闭包中,还将有一个变量,并且该新变量将是。但那个旧变量是“过去的快照”,是闭包中永远不会改变的值。 这是一个在 React 中经常出现的概念,与 RTK 查询无关,因此您可能最好阅读闭包validateUserisSuccesstrueisSuccess

您可以在这里执行以下操作,而不是访问闭包变量:

const validateUserDetails = async (name, event) => {
    event.preventDefault();
    if (event.target.value !== "") {
      let fieldData = {
        fieldName: name,
        value: event.target.value,
      };
      try {
        const data =  await validateUser(fieldData).unwrap();
        // do something with it
      } catch (error) {
        // do something with it
      }
  };
Run Code Online (Sandbox Code Playgroud)