En référence à la question non résolue (en conclusion finale)
Je reçois aussi le même problème.
https://reacttraining.com/react-router/web/guides/quick-start favorise react-router-dom
En outre, les utilisateurs préfèrent utiliser list down routes
dans un fichier plutôt que dans des composants.
Quelque chose est référé: https://github.com/ReactTraining/react-router/tree/master/packages/react-router-config
Quelque chose fonctionne (la plupart du temps):
import * as React from 'react'
import {BrowserRouter as Router, Route, Switch } from 'react-router-dom'
export const Routes = () => (
<Router>
<div>
<Switch>
<Route exact path="/login" component={Login}/>
<MainApp path="/">
<Route path="/list" component={List}/>
<Route path="/settings" component={Settings}/>
</MainApp>
<Route path="*" component={PageNotFound}/>
</Switch>
</div>
</Router>
)
Quelque chose ne fonctionne pas: site.com/SomeGarbagePath
affiche le <MainApp>
je pense.<Route path="*" component={PageNotFound}/>
Mise à jour
/ - Home - parent of all (almost)
/List - inside home
/Settings - inside home
/Login - standalone
/Users - inside home, For now just showing itself. It has further pages.
/User/123 - inside user with /:id
/User/staticUser - inside user with static route
/garbage - not a route defined (not working as expected)
C'est une façon de faire ce que vous avez décrit (notez qu'il existe d'autres façons de gérer les présentations directement dans vos composants React). Afin de garder l'exemple simple, les autres composants (<Home>, <List>
etc.) sont créés en tant que composants purement fonctionnels sans propriétés ni état, mais il serait trivial de placer chacun dans son propre fichier en tant que composant React approprié. L'exemple ci-dessous est terminé et s'exécutera.
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
class App extends Component {
render() {
const Header = () => <h1>My header</h1>;
const Footer = () => <h2>My footer</h2>;
const Login = () => <p>Login Component</p>;
const Home = () => <p>Home Page</p>;
const List = () => <p>List Page</p>;
const Settings = () => <p>Settings Page</p>;
const PageNotFound = () => <h1>Uh oh, not found!</h1>;
const RouteWithLayout = ({ component, ...rest }) => {
return (
<div>
<Header />
<Route {...rest} render={ () => React.createElement(component) } />
<Footer />
</div>
);
};
return (
<Router>
<div>
<Switch>
<Route exact path="/login" component={Login} />
<RouteWithLayout exact path="/" component={Home} />
<RouteWithLayout path="/list" component={List} />
<RouteWithLayout path="/settings" component={Settings} />
<Route path="*" component={PageNotFound} />
</Switch>
</div>
</Router>
);
}
}
export default App;
Cela fera ce qui suit, ce qui, espérons-le, est maintenant décrit dans votre question:
/login
n'a ni en-tête ni pied de page./
, /list
et /settings
ont tous l'en-tête et le pied de page.PageNotFound
, sans en-tête ni pied de page.Je serai honnête, je ne suis pas tout à fait sûr de ce que vous demandez. Je suppose que vous essayez d'obtenir votre exemple "Quelque chose ne fonctionne pas" au travail.
Quelque chose comme ça,
import * as React from 'react'
import {BrowserRouter as Router, Route, Switch } from 'react-router-dom'
export const Routes = () => (
<Router>
<div>
<Switch>
<Route exact path="/login" component={Login}/>
<MainApp path="/">
<Switch>
<Route path="/list" component={List}/>
<Route path="/settings" component={Settings}/>
</Switch>
</MainApp>
<Route component={PageNotFound} />
</Switch>
</div>
</Router>
)