在 useEffect 挂钩中未调用导航

问题描述 投票:0回答:1

如果 API 返回错误

404
,我正在尝试调用导航函数将用户从屏幕 A 导航到屏幕 B。如果用户尚未创建配置文件,那么 API 将返回错误
404
状态代码,我将在 catch 块中捕获它,然后我将检查状态代码是否为
404
如果是,那么我将导航用户创建个人资料屏幕。所以我得到
404
并且控制台日志正在终端中打印,但在第一次渲染时,它没有导航用户或者该函数没有在 iOS 中被调用。

使用效果代码:


  useEffect(() => {
    const isUserCreatedProfile = async (loggedInUserInfo) => {
      try {
        await axios
          .get(`${baseUrl}/api/user/profile?email=${loggedInUserInfo?.email}`, {
            headers: apiHeaders,
          })
          .then((res) => {
           // Some logic
            
          })
          .catch((err) => {
            componentErrorHandler("home", "isUserCreatedProfile[axios]", err);
            if (err?.response?.status === 404) {
              console.log("err got", err?.response?.status);
              navigateToCreateProfile(
                loggedInUserInfo["custom:Name"],
                loggedInUserInfo?.email,
              );
              console.log("err got here");
            }
            console.log("err got here 2");
            setLoading(false);
          });
      } catch (err) {
        componentErrorHandler("home", "isUserCreatedProfile", err);
      }
    };
    if (userInfo?.data) {
      isUserCreatedProfile(userInfo?.data);
    }
  }, [
    chatData?.connected,
    connectUserChat,
    navigateToCreateProfile,
    navigation,
    setUserInfo,
    token?.accessToken,
    userInfo,
    userLocationSave,
  ]);

导航功能代码:

 const navigateToCreateProfile = useCallback(
    (name, email) => {
      console.log("called navigation");
      navigation.replace("CreateProfile", {
        name,
        email,
      });
    },
    [navigation],
  );

终端日志:


 LOG  home isUserCreatedProfile[axios] [AxiosError: Request failed with status code 404]
 LOG  err got 404
 LOG  called navigation
 LOG  err got here
 LOG  err got here 2

我也尝试过删除函数

navigateToCreateProfile
并将其代码仅添加到catch块中,但它在iOS中仍然不起作用。

仅当我再次刷新应用程序,然后调用导航功能时,它才有效。

PS:它在 Android 上运行得非常好。

我无法弄清楚这个问题。我该如何解决?

javascript react-native axios
1个回答
0
投票
const navigateToCreateProfile = useCallback(
    (name, email) => {
      console.log("called navigation");
      navigation && navigation.replace("CreateProfile", {
        name,
        email,
      });
    },
    [navigation],
  );

© www.soinside.com 2019 - 2024. All rights reserved.