Ho recentemente rilasciato una libreria specificamente per questo scopo: https://github.com/elliottsj/react-router-query
Può gestire percorsi asincroni (cioè getChildRoutes
/getIndexRoute
), e non fornisce solo un array di percorsi, ma una serie di oggetti "FlatRoute" che contengono il percorso (fullPath
), oltre a tutte le proprietà originali di ogni percorso e una matrice di percorsi "parent":
import { query } from 'react-router-query';
const routes = (
<Route path="/" component={App}>
<Route path="author" component={Author}>
<Route path="about" component={About} />
</Route>
<Route path="users" component={Users} />
</Route>
);
query('/', routes, (error, result) => {
expect(result).toEqual([
{
fullPath: '/author/about'
component: About,
parents: [
{ path: '/', component: App },
{ path: 'author', component: Author },
],
},
{
fullPath: '/users'
component: Users,
parents: [
{ path: '/', component: App },
],
},
]);
});
Nota che solo "foglia" itinerari sono compresi nel risultato: non c'è alcun oggetto "FlatRoute" per fullPath: '/'
né fullPath: '/author'
. Questo per impedire che includano percorsi che vengono utilizzati solo come layout per percorsi secondari, ad es.
<Route path="/" component={App}>
<Route path="posts" component={PostLayout}>
<Route path="1" component={Post1} />
<Route path="2" component={Post2} />
<Route path="3" component={Post3} />
</Route>
</Route>
Se si desidera un FlatRoute per /posts
, semplicemente includono una IndexRoute
:
<Route path="/" component={App}>
<Route path="posts">
<IndexRoute component={Posts} />
<Route path="1" component={Post1} />
<Route path="2" component={Post2} />
<Route path="3" component={Post3} />
</Route>
</Route>
quello che è il caso d'uso per questo? – eenagy
Voglio usare un plugin per il webpack per la generazione di siti statici. In breve, voglio pubblicare la mia app su github.io e sto utilizzando il router react. Vedi questo progetto: https://github.com/markdalgleish/static-site-generator-webpack-plugin. Si aspettano una serie di percorsi come loro ingresso. –
ecco uno che genera sitemap [react-router-sitemap] (https://www.npmjs.com/package/react-router-sitemap), ma penso che stai meglio con una semplice riduzione (come hai detto tu) , fino a quando non hai percorsi più complessi – eenagy