【发布时间】:2021-06-25 16:56:01
【问题描述】:
我正在寻找一种方法来将我的 protectedroute 与 app.js 分开。在我的代码中一切正常。但是如果模块变得很大,那么 app.js 就很难阅读和管理
我希望将我的受保护路由与某个组件分开,以便它在这里工作得很好。
我的 app.js 现在看起来像这样
import React, { useState } from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
Link,
useRouteMatch,
useParams,
HashRouter,
BrowserRouter,
Redirect
} from "react-router-dom";
import ReactDOM from 'react-dom';
//import useToken from './Routes/UseToken';
import Login from './Login/Login';
import Dashboard from './Dashboard/Dashboard';
import Customer from './Customer/Customer';
import ProtectedRoute from './Routes/ProtectedRoute';
function App() {
return (
<>
{/** use HasRouter but that will make # in the browser */}
{/*<HashRouter>*/}
<BrowserRouter basename='/invoice/webapps/'>
<Switch>
<Route path="/login"><Login /></Route>
<ProtectedRoute path="/dashboard"><Dashboard /></ProtectedRoute>
<ProtectedRoute path="/customer"><Customer/></ProtectedRoute>
<Route exact path="/"><Redirect exact from="/" to="dashboard" /></Route>
<Route path="*"><Redirect from="/" to="dashboard" /></Route>
</Switch>
</BrowserRouter>
{/** </HashRouter>*/}
{/** use HasRouter but that will make # in the browser */}
</>
);
}
export default App;
if (document.getElementById('app')) {
ReactDOM.render(<App />, document.getElementById('app'));
}
我想把这些分开
<ProtectedRoute path="/dashboard"><Dashboard /></ProtectedRoute>
<ProtectedRoute path="/customer"><Customer/></ProtectedRoute>
【问题讨论】:
-
似乎
ProtectedRoute组件已经与App组件分离。您能更明确地说明将它们分开是什么意思吗? -
大声笑 :) 仔细阅读。如果您阅读我的代码,您可以看到是否有几十个受保护的路由,那么 app.js 对于前端设计师来说变得非常大,所以总是更好地将 app.js 的受保护路由分开,并以某种方式在应用内的组件中调用受保护的路由。 js 看代码很清楚。
-
Dozens 不是一个大的数字,也不是无法管理的数字,我完全希望任何前端开发人员都能够阅读和维护它们。为什么要抽象出私有路由?它只会增加不必要的代码和复杂性,如果您不注意路由顺序和路径特异性,还可能会破坏
Switch呈现路由的方式。您会希望将任何特定深度的所有路线一起渲染(很像下面 Lio 的回答)。
标签: reactjs react-router react-hooks