【问题标题】:react-router redirect render nothing in protected routereact-router 重定向在受保护的路由中不渲染任何内容
【发布时间】:2021-12-05 05:35:58
【问题描述】:

我有一个名为<LoggedRoutes/> 的受保护路由,如果用户尚未完成他的引导,它应该重定向并呈现我的<Onboarding/> 组件。但是如果我没有登录,该组件不会呈现,而我的 <Login/> 组件正在呈现。我不明白为什么。请注意,重定向是有效的,因为例如当我尝试访问 /edit 时,我被重定向到 /onboarding

任何想法为什么我的<Onboarding/> 组件没有呈现?提前致谢!下面是代码:

const LoggedRoutes = ({ component: RouteComponent, ...rest }) => {
    const { currentUser } = useContext(AuthContext);
    const onboarding = false;
    return (
        <Route
            {...rest}
            render={routeProps =>
                !!currentUser && onboarding ? (
                    <RouteComponent {...routeProps} />
                ) : !!currentUser && !onboarding ? (
                    <Redirect to={"/onboarding"} />
                ) : (
                    <Redirect to={"/login"} />
                )
            }
        />
    );
};

提前致谢!

【问题讨论】:

  • 你能检查一下它是否在控制台中也抛出任何错误。
  • 没有错误:/

标签: reactjs react-router react-router-dom


【解决方案1】:

将入职硬编码为false,下面的语句原来是这样的

currentUser && false  ? ( <RouteComponent {...routeProps} /> ) :
currentUser && true ? ( <Redirect to={"/onboarding"} /> ) :
                             ( <Redirect to={"/login"} /> )

然后,

false  ? ( <RouteComponent {...routeProps} /> ) :
currentUser  ? ( <Redirect to={"/onboarding"} /> ) :
                             ( <Redirect to={"/login"} /> )

所以它只取决于currentUser 值。检查其值是否为空/未定义。

【讨论】:

    【解决方案2】:

    不确定,但试试这个:

    const LoggedRoutes = ({ component: RouteComponent, ...rest }) => {
        const { currentUser } = useContext(AuthContext);
        const onboarding = false;
        return (
            <Route
                {...rest}
                render = { routeProps => (
                               currentUser && onboarding ? ( <RouteComponent {...routeProps} /> ) :
                               currentUser && !onboarding ? ( <Redirect to={"/onboarding"} /> ) :
                               ( <Redirect to={"/login"} /> )
                        )}
            />
        );
    };
    

    【讨论】:

    • 谢谢。我已经试过了,没有区别
    • 你能在 stackblitz 上分享你的代码吗?这样我就可以看到它的作用。 @r10d
    猜你喜欢
    • 2021-12-26
    • 2020-10-26
    • 2022-08-08
    • 1970-01-01
    • 2016-05-29
    • 2018-02-02
    • 2022-11-27
    • 2019-10-31
    • 2021-10-04
    相关资源
    最近更新 更多