我有两个Reaction模块AppAAppB,在一个Reaction应用程序下.它们都有单独的路由文件,我在其中定义了特定于每个模块的各自的路由.在主Reaction项目下,我有一个路由文件,它组合了来自两个模块的路由.

appA-routing.tsx:

// All the require imports.

const AppARouting: FC = () => {
    /// TSX:
    return (
        <Routes>
            <Route path={"/appA"} element={<AppA_Layout />}>
                <Route path={Paths.appA_HOME} element={<AppA_Home />} >
                    <Route path={Paths.appA_DASHBOARD} element={<AppA_Dashboard />} />
                    <Route path={Paths.REQUESTS} element={<Requests />} />
                </Route>
        </Routes>
    );
};

AppA_Routing.displayName = "AppA_Routing";

export default AppA_Routing;

appB-routing.tsx:

// All the require imports.

const AppBRouting: FC = () => {
    /// TSX:
    return (
        <Routes>
            <Route path={"/appB"} element={<AppB_Layout />}>
                <Route path={Paths.appB_HOME} element={<appB_Home />} >
                    <Route path={Paths.appB_DASHBOARD} element={<AppB_Dashboard />} />
                    <Route path={Paths.APPROVALS} element={<Approvals />} />
                </Route>
        </Routes>
    );
};

AppB_Routing.displayName = "AppB_Routing";

export default AppB_Routing;

routing.tsx

// All the require imports.

const Routing: FC = () => {
    /// TSX:
    return (
        <BrowserRouter basename={Paths.BASE}>
            <Routes>
                <Route path="/" element={<MainLayout />}>
                    <Route path="/" element={<MainHome />} />
                </Route>
            </Routes>

            <AppA_Routing />
            <AppB_Routing />

            <Routes>
                <Route path={Paths.SignOut} element={<SignOut />}/>
                <Route path={Paths.PAGE_NOT_FOUND} element={<UnknownRoute />} />
                <Route path="*" element={<UnknownRoute />} />
            </Routes>
        </BrowserRouter>
    );
};

Routing.displayName = "Routing";

export default Routing;

文件夹 struct 如下所示:

MainApp/
  |-src/
     |-common-components/
     |-modules/
     |  |-appA/
     |  |  |-appA-components/
     |  |  |-appA-routing.tsx
     |  |-appB/
     |     |-appB-components/
     |     |-appB-routing.tsx
     |-routing.tsx

我面临着一个奇怪的问题,当我导航到任何特定的路由时,它正在加载它各自的组件,但同时它下面还加载了通配符路由,也就是UnknownRoute个组件.

例如,如果我在/appA/home路由中,则渲染如下:

<AppA_Home />
<UnknownRoute /> <!-- The expected is, this component should not be loaded. -->

如果我在/appB/home路,它是渲染如下:

<AppB_Home />
<UnknownRoute /> <!-- The expected is, this component should not be loaded. -->

推荐答案

您将所有的子路由渲染到单独的Routes中,以便它们都独立地进行渲染/匹配.合并所有路由,以便它们都在单个Routes下渲染,并且可以作为组合组渲染/匹配.

示例:

const Routing: FC = () => {
  /// TSX:
  return (
    <BrowserRouter basename={Paths.BASE}>
      <Routes>
        <Route element={<MainLayout />}>
          <Route path="/" element={<MainHome />} />
        </Route>
        <Route path="/appA/*" element={<AppARouting />} />
        <Route path="/appB/*" element={<AppBRouting />} />
        <Route path={Paths.SignOut} element={<SignOut />}/>
        <Route path={Paths.PAGE_NOT_FOUND} element={<UnknownRoute />} />
        <Route path="*" element={<UnknownRoute />} />
      </Routes>
    </BrowserRouter>
  );
};

AppARoutingAppBRouting组件渲染将相对于渲染它们的父路由构建的派生管线,因此您可能需要调整管线以获得正确的子管线.

const AppARouting: FC = () => {
  /// TSX:
  return (
    <Routes>
      <Route element={<AppA_Layout />}> // <-- "/appA"
        <Route
          path={Paths.appA_HOME} // <-- "/appA/Paths.appA_HOME", etc
          element={<AppA_Home />}
        />
        <Route path={Paths.appA_DASHBOARD} element={<AppA_Dashboard />} />
        <Route path={Paths.REQUESTS} element={<Requests />} />
      </Route>
    </Routes>
  );
};
const AppBRouting: FC = () => {
  /// TSX:
  return (
    <Routes>
      <Route element={<AppB_Layout />}> // <-- "/appB"
        <Route path={Paths.appB_HOME} element={<appB_Home />} />
        <Route path={Paths.appB_DASHBOARD} element={<AppB_Dashboard />} />
        <Route path={Paths.APPROVALS} element={<Approvals />} />
      </Route>
    </Routes>
  );
};

Typescript相关问答推荐

如何根据参数的值缩小函数内的签名范围?

JS Redux Devtools扩展不工作

找不到带名称的管道''

当我点击外部按钮时,如何打开Html Select 选项菜单?

React typescribe Jest调用函数

类型脚本中没有接口的中间静态类

如何在TypeScript中将一个元组映射(转换)到另一个元组?

类型脚本基于数组作为泛型参数展开类型

TypeScrip原始字符串没有方法

在HighChats列时间序列图中,十字准线未按预期工作

使用KeyOf和Never的循环引用

为什么S struct 类型化(即鸭子类型化)需要非严格类型联合?

在正常函数内部调用异步函数

如何编辑切片器以使用CRUD调用函数?

Angular 16将独立组件作为对话框加载,而不进行布线或预加载

TypeScrip-如何自动推断UNION变量的类型

仅当定义了值时才按值筛选数组

可以';t使用t正确地索引对象;联合;索引类型

如何创建允许使用带有联合类型参数的Array.from()的TS函数?

TS 条件类型无法识别条件参数