J'ai une page avec cette route:
<Transfer transferId={this.props.match.params.id} />
<Link to={`/Transfers/${this.props.match.params.id}/TransferItems`}>Transfer Items</Link>
<Link to={`/Transfers/${this.props.match.params.id}/NewTransferItem`}>New Transfer Item</Link>
<Switch>
<Route
path="/Transfers/:transferId/TransferItems"
exact
render={() => <TransferItems transferId={this.props.match.params.id} />}
/>
<Route
path="/Transfers/:transferId/NewTransferItem"
exact
render={() => <NewTransferItem transferId={this.props.match.params.id} />}
/>
</Switch>
Je veux utiliser la route imbriquée dans la même page comme ceci:
"/Transfers/e58e63d4-ed09-430a-b2e5-5350c4510648"
Comment puis-je faire cela?
4 Réponses :
Dans votre composant Transfer , vous devrez inclure les sous-routes que vous avez données dans votre question:
//this is inside Transfer component's render method
render(){
return (
<div>
<Link to={`/Transfers/${this.props.match.params.id}/TransferItems`}>Transfer Items</Link>
<Link to={`/Transfers/${this.props.match.params.id}/NewTransferItem`}>New Transfer Item</Link>
// some other code...
<Route
path="/Transfers/:transferId/TransferItems"
exact
render={<TransferItems transferId={this.props.match.params.id} />}
/>
<Route
path="/Transfers/:transferId/NewTransferItem"
exact
render={<NewTransferItem transferId={this.props.match.params.id} />}
/>
<div>
)
}
Cela renverra les composants de manière dérivée TransferItems et NewTransferItem chaque fois que les itinéraires s'appliquent.
Un guide complet pour cela peut être obtenu à partir de ce basic-example .
il ne trouve toujours pas l'itinéraire!
Veuillez vérifier à nouveau le code, je l'ai mis à jour - supprimé la fonction de flèche d'enroulement de la prop render pour les composants Route .
Vous pouvez avoir des commutateurs imbriqués, quel est le problème, faites-le simplement:
<Transfer transferId={this.props.match.params.id} />
<Link to={`/Transfers/${this.props.match.params.id}/TransferItems`}>Transfer Items</Link>
<Link to={`/Transfers/${this.props.match.params.id}/NewTransferItem`}>New Transfer Item</Link>
<Switch>
<Route
path="/Transfers/:transferId/TransferItems"
exact
render={({match}) => <TransferItems transferId={match.params.id} />} // don't use this.props.match, use the match from here <<
/>
<Route
path="/Transfers/:transferId/NewTransferItem"
exact
render={({match}) => <NewTransferItem transferId={match.params.id} />}
/>
</Switch>
il ne trouve toujours pas l'itinéraire!
mettre en place un exemple de codesandbox. Je vais y réparer votre code.
Je pense que vous devriez supprimer exact de vos itinéraires, puis classer les itinéraires de spécifique à public.
in may case i use url to save base first path then other path use it
function DashboardRestaurant(props) {
let {url } = useRouteMatch();
return(
<div className="col-12">
<div className="dashboard-nav">
<div className="dashboard-nav-inner">
<ul data-submenu-title="Main">
<li>
<Link to={`${url}`}>
<i className="sl sl-icon-settings"></i>
Dashboard
</Link>
</li>
<li>
<Link to={`${url}/sets`}>
<i className="fa fa-calendar-check-o"></i> Sets
</Link>
</li>
<li>
<Link to={`${url}/steps`}>
<i className="fa fa-calendar-check-o"></i> Steps
</Link>
</li>
</ul>
</div>
</div>
<Switch>
<Route exact path={`${url}`}>
<h3>Please select a topic.</h3>
</Route>
<Route path={`${url}/sets`} component={AddRestaurantSets}/>
<Route path={`${url}/steps`} component={AddRestaurantSteps}/>
</Switch>
</div>)
}