Вы можете использовать пакет «response-router-dom» npm. Пример частного маршрута:
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import { isLogin } from '../utils'; // return true if user logged in
const PrivateRoute = ({component: Component, ...rest}) => {
return (
// Show component only when the user is logged in
// Otherwise, redirect the user to /signin page
<Route {...rest} render={props => (
isLogin() ?
<Component {...props} />
: <Redirect to="/signin" />
)} />
);
};
export default PrivateRoute;
Publi c Пример маршрута:
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import { isLogin } from '../utils';
const PublicRoute = ({component: Component, restricted, ...rest}) => {
return (
// restricted = false meaning public route
// restricted = true meaning restricted route
<Route {...rest} render={props => (
isLogin() && restricted ?
<Redirect to="/dashboard" />
: <Component {...props} />
)} />
);
};
export default PublicRoute;
Вместе:
import React, { Component } from 'react';
import './App.css';
import { BrowserRouter, Switch } from 'react-router-dom';
import Home from './components/Home';
import Dashboard from './components/Dashboard';
import SignIn from './components/SignIn';
import PrivateRoute from './components/PrivateRoute';
import PublicRoute from './components/PublicRoute';
class App extends Component {
render() {
return (
<BrowserRouter>
<Switch>
<PublicRoute restricted={false} component={Home} path="/" exact />
<PublicRoute restricted={true} component={SignIn} path="/signin" exact />
<PrivateRoute component={Dashboard} path="/dashboard" exact />
</Switch>
</BrowserRouter>
);
}
}
export default App;
Кроме того, вы можете создавать сборку веб-пакета и вырезать фрагменты по одному маршруту (стр.)