2 votes

React Router : Redirection avec un paramètre d'URL ?

Dans ma fonction de rendu, j'ai

 (

)}>

Par exemple, si le paramètre pour "course" était "BIO1001", je veux rediriger la page vers "/classes/BIO1001/home" lorsque je vais sur la page "/classes/BIO1001/". Auparavant, j'ai essayé simplement de mettre un tag Redirect avec "from" et "to" mais j'ai rencontré le problème que l'URL allait en fait vers "/classes/:course/home" au lieu de "/classes/BIO1001/home"

Est-ce que la route imbriquée avec le chemin path="/home" irait vers "/classes/BIO1001/home"? Je n'étais pas sûr de comment je pouvais définir une route où le chemin commence à partir de l'URL précédente (dans ce cas, à partir de "/classes/:course/")

1voto

Linda Paiste Points 20302

Le premier problème est ici :

render={(match) => ( ...

La fonction render reçoit un objet props qui contient une propriété match. Au lieu de déstructurer la propriété match, ce que vous faites en réalité, c'est assigner l'ensemble de l'objet props à une variable match. Donc lorsque vous accédez à match.params, cela ne sera pas trouvé.

Vous devez mettre des accolades autour de match pour le déstructurer.

render={({match}) => ( ...

Le deuxième problème est l'imbrication des deux composants Route. J'obtiens un avertissement :

Avertissement : Vous ne devez pas utiliser et dans la même route; sera ignoré

Ainsi, en fonction de cet avertissement, vous pouvez voir que votre Redirect est entièrement ignoré puisqu'il provient de render. Le Route enfant est vu comme la fonction de rendu pour les classes Route.

Je suppose que vous avez diverses sous-pages d'un cours? Et nous voulons forcer l'URL à inclure "/home" si rien n'est défini? (Personnellement, je ferais l'inverse et redirigerais "/home" vers l'URL racine du cours).

Auparavant, j'ai simplement essayé de mettre une balise Redirect avec "from" et "to" mais j'ai rencontré le problème de l'URL allant en fait vers "/classes/:course/home" au lieu de "/classes/BIO1001/home"

Conformément à la documentation, vous pouvez utiliser des paramètres dans votre Redirect, mais seulement s'il est à l'intérieur d'un Switch.

Voici un exemple de code pour le faire :

const CoursePage = () => {
  // vous pouvez accéder aux arguments depuis les props ou par l'intermédiaire des hooks
  const { course, tab } = useParams();

  // je ne suis pas sûr de la façon dont vous voulez gérer les différents onglets

  return Visualisation du cours {course};
};

const App = () => (

);

export default App;

0voto

Ardalan Nahavandi Points 124

Votre routage imbriqué est correct je pense. Mais vous affichez votre composant Home sans aucune propriété dynamique. Essayez de le faire comme ci-dessous :

 (

)}>

0voto

broofa Points 21663

Note : L'élément Redirect peut être utilisé sans élément Route contenant en fournissant une propriété from. Dans ce cas, vous pouvez simplement utiliser les jetons de paramètre d'URL à la fois dans from et to, et ils seront automatiquement transférés pour vous. Par exemple, si vous utilisez un bloc Switch...

  {/* différentes routes de l'application... */}

  {/* action de redirection */}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X