除一个路由外,是否所有路由都使用基本名称子目录?

时间:2019-07-04 12:07:42

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

我的react应用程序已集成到已经存在的Maven项目中,并且需要具有/my的子目录。

因此,所有Route都必须具有basename中的/my/~~~。但是,有一条不需要子目录的路由,如果应用了该路由,则击中该路由会导致无限循环。

特定路线为/logout。因此,点击/my/logout会导致无限循环。

项目中只有一个引用链接到logout路线,而一个Link

<Link to={"/logout"}>Logout</Link>

下面是我的App.js和我的<Router>

const App = () => {
  return (
    <div className="App">
      <Router basename="/my/">
        <Switch>
          <Route path="/login" component={Login} />
          <Route exact path={"/"} component={Login} />
          <Route path="/forgotpassword" component={ForgotPassword} />
          <Route
            path="/website-user/reset-password/:token/:userId"
            component={ResetPassword}
          />
          <Route
            path="/complete-registration/:token/:userId"
            component={FinishRegistration}
          />
          <Route path={"/register"} component={Login} />
          <Route
            path="/register?email=:email&telephone=:telephone"
            component={Login}
          />
          <Route path={"/"} component={SubNav} />
        </Switch>
        <Route path={"/overview"} component={Overview} />
        <Route path={"/favourites"} component={Favourites} />
        {/* How to get LogoutComponent to go to /logout instead of /my/logout */}
        <Route path={"/logout"} component={Logout} />
      </Router>
    </div>
  );
};

那么是否有可能将所有<Route>转到/my/~~~,但注销才能转到/logout

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

否。您不能这样做。

页面上不应有多个BrowserRouters

无论如何,它都不会起作用,因为它正在与最近的Router祖先通话。包装完另一个路由器后,您将创建一个新的历史记录实例,从而创建了路由和链接的整个子集。

一种解决方法是,不要为route创建logout,而是在与{{ 1}}按钮。