React Native Expo 中使用 useContext 进行重定向的条件渲染问题

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

我有一个简单的应用程序,其中包含一个 index.tsx 文件和

"/app"
下的布局。我也有一个身份验证上下文。如果我将两个重定向都保留在 index.tsx 中,则控制台日志始终为我提供 null 并且渲染仅发生一次。否则,如果我删除它们,即使成功并且用户已加载,我也会收到日志。

import React, { type ReactNode } from "react";
import { useAuthContext } from "@/contexts/AuthContext";
import { Redirect } from "expo-router";
import { Role } from "@/types/auth";

const Page = (): ReactNode => {
  const { status, user } = useAuthContext();
  console.log(status, user);

  if (user?.role.id === Role.Business) return <Redirect href={"/(business)"} />;

  return <Redirect href={"/(user)"} />;
};

export default Page;

特别是,我希望当在上下文中(登录用户)分配用户值时,它将使用新值再次渲染index.tsx。这种情况发生,但只有当我在index.tsx 中没有两个重定向时才会发生。如果我放置一个空的普通堆栈,它会呈现给我两次,第一次为 null,因为它处于挂起状态,第二次成功为用户的值。

react-native expo expo-router
1个回答
0
投票

我想我明白你想要实现的目标:获取当前的身份验证状态,并在它随新值或状态变化时重新渲染。我不太明白你的问题的上下文,但似乎

return <Redirect href={"/({})"}
被返回两次或相互影响。也许尝试条件(三元)运算符。

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