我有一个react 应用程序与2种不同的布局,"主布局"和"授权布局".我发现我的主布局页面工作没有问题,但它似乎没有加载授权布局页面.如果我try 访问"/login",我会得到一个空白的主布局页面,这让我认为它只访问了第一个<Route>部分.

<div className="App">
  <Provider store={store}>
    <BrowserRouter>
      <Switch>
        <Route>
          <MainLayout>
            <Switch>
              <Route path="/" exact component={Dashboard} />
              <Route path="/search" exact component={SearchResults} />
              <Route path="/user/:user_id" exact component={Profile} />
              <PrivateRoute path="/settings" exact component={Settings} />
              <Route
                path="/communities"
                exact
                component={CommunityDashboard}
              />
              <PrivateRoute
                path="/communities/new"
                exact
                component={CommunityNew}
              />
              <Route
                path="/communities/view/:community_id"
                exact
                component={CommunityView}
              />
              <PrivateRoute
                path="/communities/edit/:community_id"
                exact
                component={CommunityEdit}
              />
              <Route path='/404' component={Error404} />
            </Switch>
          </MainLayout>
        </Route>
        <Route>
          <AuthLayout>
            <Switch>
              <Route
                path="/password-reset/:reset_key?"
                exact
                component={PasswordReset}
              />
              <Route path="/register" exact component={Register} />
              <Route path="/login" exact component={Login} />
            </Switch>
          </AuthLayout>
        </Route>

        <Redirect from='*' to='/404' />
      </Switch>
    </BrowserRouter>
  </Provider>
</div>

我知道Switch将呈现匹配的第一个<Route>,这可能是我的设置不起作用的原因.如何才能在不干扰已创建的路径的情况下渲染这两个布局?

推荐答案

为确保与身份验证相关的路由("/Password-Reset"、"/REGISTER"、"/LOGIN")的AuthLayout呈现正确,您可能需要重新构造您的路由.以下是如何修改路由配置的示例:

<div className="App">
<Provider store={store}>
    <BrowserRouter>
        <Switch>
            <Route path="/password-reset/:reset_key?" exact>
                <AuthLayout>
                    <PasswordReset />
                </AuthLayout>
            </Route>
            <Route path="/register" exact>
                <AuthLayout>
                    <Register />
                </AuthLayout>
            </Route>
            <Route path="/login" exact>
                <AuthLayout>
                    <Login />
                </AuthLayout>
            </Route>
            {/* Other MainLayout routes */}
            <Route>
                <MainLayout>
                    <Switch>
                        <Route path="/" exact component={Dashboard} />
                        <Route path="/search" exact component={SearchResults} />
                        <Route path="/user/:user_id" exact component={Profile} />
                        <PrivateRoute path="/settings" exact component={Settings} />
                        <Route path="/communities" exact component={CommunityDashboard} />
                        <PrivateRoute path="/communities/new" exact component={CommunityNew} />
                        <Route path="/communities/view/:community_id" exact component={CommunityView} />
                        <PrivateRoute path="/communities/edit/:community_id" exact component={CommunityEdit} />
                        <Route path='/404' component={Error404} />
                    </Switch>
                </MainLayout>
            </Route>
            <Redirect from='*' to='/404' />
        </Switch>
    </BrowserRouter>
</Provider>

通过将特定路由嵌套在其各自的布局中(与身份验证相关的路由的AuthLayout和其余的MainLayout),您可以确保将正确的布局应用于相应的路由.

确保AuthLayout和MainLayout是正确定义其布局 struct 并相应处理子组件呈现的组件.这种 struct 应该有助于在您的Reaction应用程序中为不同的路由集呈现适当的布局.

Javascript相关问答推荐

如何通过onClick为一组按钮分配功能;

React存档iframe点击行为

使用JavaScript单击上一个或下一个特定按钮创建卡滑动器以滑动单个卡

从实时数据库(Firebase)上的子类别读取数据

拖放仅通过 Select 上传

自定义高图中的x轴标签序列

Ember.js 5.4更新会话存储时如何更新组件变量

Html文件和客户端存储的相关问题,有没有可能?

ChartJs未呈现

让chart.js饼图中的一个切片变厚?

Vaadin定制组件-保持对javascrip变量的访问

令牌JWT未过期

如何为仅有数据可用的点显示X轴标签?

为什么延迟在我的laravel项目中不起作用?

如何在AG-Grid文本字段中创建占位符

JAVASCRIPT SWITCH CASE语句:当表达式为';ALL';

MUI迷你图:如何将$符号添加到MUI迷你图中的工具提示数据

在范围数组中查找公共(包含)范围

需要刷新以查看Mern堆栈应用程序中的更改

检测带有委托的元素内部的点击,以及元素何时按其类名被选中