solid-js - 在 SolidJS 中,如何做后备路由?

标签 solid-js

我是 Solid JS 的新手,主要来自 React 背景。我现在第一次使用 Solid 和 Solid-App-Router。

我正在尝试设计具有后备功能的路由,这意味着如果将端点放入不存在的 URL 中,它将重定向到默认位置。我的问题是,无论如何,这个后备都会执行,并覆盖我的所有其他路线。

我要补充一点,namedLazy 效果很好,它只是一个支持 SolidJS lazy() 命名导出的包装器。这是我的路由代码:

import { namedLazy } from '../../utils/solidWrappers';
import { Routes, Route } from 'solid-app-router';
import { isAuthenticated } from '../../resources/AuthResources';

const Welcome = namedLazy(() => import('./Welcome'), 'Welcome');

const Categories = namedLazy(() => import('./Categories'), 'Categories');

const Redirect = namedLazy(() => import('../UI/Redirect'), 'Redirect');

export const AppRoutes = () => {
    return (
        <Routes>
            <Route path="/welcome" element={<Welcome />} />
            {isAuthenticated() && (
                <Route path="/categories" element={<Categories />} />
            )}
            <Route path="*" element={<Redirect />} />
        </Routes>
    );
};

这是我的重定向组件:

从“solid-app-router”导入{useNavigate};

export const Redirect = () => {
    const navigate = useNavigate();
    navigate('/welcome');
    return <></>;
};

这种后备路由设计适用于react-router,但它不适用于solid-app-router。这不是唯一的路线设计,我也尝试了基于配置/阵列的路线设计,并遇到了同样的问题。我愿意接受有关如何正确实现此功能的建议。

最佳答案

正如另一位评论者所说,我的后备路线代码实际上确实有效。这是一个 react 性问题。

当页面首次加载时,isAuthenticated() 返回 false,因为身份验证检查是尚未运行的 ajax 调用。因此/categories 路由不会被渲染,如果我尝试手动导航到/categories,我会通过重定向来代替。这使得包罗万象的路线看起来好像覆盖了一切,而实际上它的行为符合预期。

我添加了另一项检查,以防止路由渲染,直到进行身份验证检查 ajax 调用之后,然后一切正常。

关于solid-js - 在 SolidJS 中,如何做后备路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72775767/

相关文章:

typescript - Solid.js <select> onchange 事件 : Property 'value' does not exist on type 'EventTarget'

solid-js - SolidJs中函数名以use和create开头的含义和意义是什么

typescript +SolidJS : how can I extend props of some JSX element?

typescript - 如何在 SolidJS 中注释输入事件?

solid-js - 全局状态的 `createContext()` 和 `createSignal()` 之间的区别

solid-js - Solid App Router 元素不是渲染组件 - 对象对象

typescript - 使用 SolidJS 中的 fetch API 渲染远程数据

solid-js - 如何在 Solid.js 中使用 Ref?