4
votes

React Router Dom Link dans un autre composant

Je suis assez nouveau dans React en général, donc je m'excuse à l'avance s'il existe une solution simple.

J'ai deux composants:

Tableau de bord
--Sidebar (appelé dans le tableau de bord)

J'ai un chemin mis en place dans le tableau de bord et des liens dans ma barre latérale. Lorsque je clique sur un lien, l'URL change, mais le tableau de bord ne s'affiche pas à nouveau, donc il ne change que lors d'une actualisation de page. Ma question est la suivante: y a-t-il un moyen via react-router que je puisse configurer mon tableau de bord pour qu'il soit à nouveau rendu en cliquant sur un lien dans la barre latérale?

Importer

<BrowserRouter>
    <Link
        to="/"
        className="nav-link" 
        onClick={this.navigation} 
    >
    Link</Link>
    <Link
        to="/profile"
        className="nav-link" 
        onClick={this.navigation} 
    >
    Link</Link>
    <Link
        to="/project"
        className="nav-link" 
        onClick={this.navigation} 
    >
    Link</Link>
<BrowserRouter>

Composant du tableau de bord:

<DashboardSidebar />
<BrowserRouter>
    <div>
        <Route exact path="/" component={DashboardLanding} />
        <Route path="/profile" component={ViewUsers} />
        <Route path="/project" component={ViewProjects} />
    </div>
</BrowserRouter>

Composant de la barre latérale du tableau de bord

import { BrowserRouter, Route, Link } from 'react-router-dom';


0 commentaires

3 Réponses :


1
votes

Pas besoin d'un autre dans votre composant SideBar. enveloppez-le avec un div ou peut-être un fragment.


10 commentaires

J'ai déplacé la barre latérale au-dessus du tableau de bord comme vous l'avez suggéré, malheureusement, le composant ne rend toujours pas


Avez-vous toujours deux dans votre code?


Oui, doivent-ils tous les deux être imbriqués sous le même ?


Non, vous n'avez besoin que de vos balises sous le , pas du , les liens peuvent être n'importe où dans votre application, alors supprimez simplement le autour de votre balise et mettez un

au lieu


Lorsque je supprime les balises autour de , toute l'application est interrompue et j'obtiens cette erreur: Vous ne devez pas utiliser en dehors d'un


Ouais comme je l'ai dit, c'est un peu difficile de poster des codes dans les commentaires, je vais juste partager l'essentiel avec vous


gist.github.com/prithweedas/2ceffa8d58fb9dbc4e6c3543ff024ea6 vers le lien gtml


Merci pour l'essentiel qui était vraiment utile, mais cela renvoie une nouvelle erreur. Un ne peut avoir qu'un seul élément enfant Voici mon composant de tableau de bord: gitlab.mi.hdm-st Stuttgart.de/eo023/client-management-system/bl‌ ob /… Composant de la barre latérale gitlab.mi.hdm-st Stuttgart.de/eo023/client-management-system/bl‌ ob /…


Ouais c'était mon mauvais, j'ai oublié ça, mis à jour l'essentiel, si <> cette syntaxe ne fonctionne pas pour vous, utilisez simplement un

au lieu de ceux-ci


Vous êtes le bienvenu, si cela vous a aidé, veuillez voter pour et accepter la réponse pour aider les autres à identifier la bonne réponse



1
votes
  1. Peut-être que le problème est dans: dernière ligne de code BrowserRouter vous avez une balise ouverte au lieu de fermer.

  2. La deuxième solution peut être d'essayer de changer le navigateur BrowserRouter avec la balise div.


1 commentaires

Désolé, le premier problème vient uniquement de ma faute en copiant et en collant un code plus précis! J'ai également fait comme @prithweedas suggéré ci-dessous et déplacé tout le code du composant de la barre latérale vers mon tableau de bord, cependant, le composant ne se rend toujours pas.



0
votes

BrowserRouter devait contenir le composant DashboardboardSidebar et le tout enveloppé dans un seul enfant.

<BrowserRouter>
<>
<DashboardSidebar />
<div>
    <Route exact path="/" component={DashboardLanding} />
    <Route path="/profile" component={ViewUsers} />
    <Route path="/project" component={ViewProjects} />
</div>
</>


0 commentaires