当前位置: 首页 > 知识库问答 >
问题:

react router dom:如何在交换机中拥有多个“外壳”,每个外壳都有自己的路由?

汤枫
2023-03-14

我的应用程序中有两个主要的页面“shell”。第一个shell用于“unauth”页面登录流(背景图像、材质ui纸张),第二个shell用于主仪表板(导航栏、侧边栏等)。

下面的代码是我试图简化遇到的问题的代码。有人能告诉我如何正确地实现这一点吗?

  <BrowserRouter>
    <Switch>
      <Route component={Shell1}>
        <Route path="/test1" exact component={() => <div>Test 1</div>} />
        <Route path="/test2" exact component={() => <div>Test 2</div>} />
      </Route>
      <Route component={Shell2}>
        <Route path="/test3" exact component={() => <div>Test 3</div>} />
        <Route path="/test4" exact component={() => <div>Test 4</div>} />
      </Route>
    </Switch>
  </BrowserRouter>

我从另一个StackOverflow帖子中得到了这个尝试,但是上面的代码不起作用。导航到/test1时,Shell1(只是一个表示Shell1的div)不显示,/test3/test4根本不工作。

下面是一个代码沙盒演示:https://codesandbox.io/s/react-example-362ow

提前谢谢。

共有1个答案

连翰
2023-03-14

基本上,您会希望嵌套这样的路由,其中父组件Road包装子组件Road

以下是一些需要身份验证的示例:https://codesandbox.io/s/yqo75n896x(使用Redux状态)或https://codesandbox.io/s/5m2690nn6n(使用React状态)

工作示例:

指数js

import ReactDOM from "react-dom";
import React, { Fragment } from "react";
import { BrowserRouter, Route, Switch, Link } from "react-router-dom";
import Shell1 from "./shell1";
import Shell2 from "./shell2";

function NavBar() {
  return (
    <Fragment>
      <Link to="/shell1/test1">Test1</Link>
      <br />
      <Link to="/shell1/test2">Test2</Link>
      <br />
      <Link to="/shell2/test3">Test3</Link>
      <br />
      <Link to="/shell2/test4">Test4</Link>
    </Fragment>
  );
}

function App() {
  return (
    <BrowserRouter>
      <div>
        <NavBar />
        <Route path="/shell1" component={Shell1} />
        <Route path="/shell2" component={Shell2} />
      </div>
    </BrowserRouter>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));

shell1。js

import React from "react";
import { Route, Switch } from "react-router-dom";

export default function Shell1({ match }) {
  return (
    <div>
      <div>Shell 1</div>
      <Switch>
        <Route
          exact
          path={`${match.url}/test1`}
          component={() => <div>Test 1</div>}
        />
        <Route
          exact
          path={`${match.url}/test2`}
          component={() => <div>Test 2</div>}
        />
      </Switch>
    </div>
  );
}

谢尔2。js

import React from "react";
import { Route, Switch } from "react-router-dom";

export default function Shell2({ match }) {
  return (
    <div>
      <div>Shell 2</div>
      <Switch>
        <Route
          exact
          path={`${match.url}/test3`}
          component={() => <div>Test 3</div>}
        />
        <Route
          exact
          path={`${match.url}/test4`}
          component={() => <div>Test 4</div>}
        />
      </Switch>
    </div>
  );
}
 类似资料:
  • 问题内容: 只是一个简单的问题: 如何清除外壳中的屏幕?我见过类似的方式: 这只是打开Windows cmd,清除屏幕并关闭,但是我希望清除外壳窗口 (PS:我不知道这有帮助,但是我使用的是Python 3.3.2版) 谢谢:) 问题答案: 对于macOS / OS X,您可以使用子进程模块并从外壳程序中调用“ cls”: 为了防止在窗口顶部显示“ 0”,请用以下内容替换第二行: 对于Linux,

  • 问题内容: 每个外键上的索引都会优化查询吗? 问题答案: 通常,将索引放在外键上被认为是一种好习惯。b / c完成此操作,将FK表链接到包含键定义的表时,有助于提高连接性能。 这并不能神奇地优化您的整个查询,但是绝对可以帮助改善FK及其主键对等部分之间的联接性能。

  • 好吧,这是一个两部分的问题,我试图最好地解释我的疑问: 代码很简单,用户不断输入成绩,程序会对其进行计数,一旦用户给出EOF条目,程序会在最后显示每个成绩的最终计数。 1) 当我运行代码时,程序会正确地跟踪我输入的每个等级的计数,但总是落在默认情况下,即使输入是正确的!为什么会这样? 2) 因此,我不完全确定“cin.get()”是如何工作的,但如果我是对的,它会接受用户输入的任何内容的第一个字符

  • 要为Ubuntu映像启动交互式shell,我们可以运行: 但当对Alpine Docker图像运行此操作时,会产生以下结果: 在Alpine base容器中启动交互式shell的命令是什么?

  • 问题内容: 我写了一个python程序。如果我有一个像这样的shebang: 然后使用以下命令使文件可执行: 我可以这样运行程序: 这是问题。我使用conda虚拟环境。当我运行上述程序时,系统会创建一个无法识别活动环境的子外壳: 但是如果我这样做的话… 如何指定在子Shell中使用的正确环境?可能吗?我希望省去输入六个字符串的麻烦。 另一篇文章,在conda托管环境中的Shebangs,简短地谈到

  • 在“Linux Shell脚本编写指南”一书中 它说 扩展为 $、$2、3 等等, 扩展为 ,其中 是 的第一个字符。 $ 和 之间有什么区别, 是什么意思?