Heim  >  Fragen und Antworten  >  Hauptteil

Rendern Sie die React Router-Komponente erneut, indem Sie selbst auf den Link klicken.

<p>Ich verwende <code>react-router-dom</code> <h1>code</h1> <pre class="brush:php;toolbar:false;"><NavLink to="/pathOne" className="ripple">label1</NavLink> <NavLink to="/pathTwo" className="ripple">label2</NavLink></pre> <h1>Frage</h1> <p>Wenn Sie auf den einen oder anderen Link klicken, wird die Routenkomponente wie erwartet gerendert. Wenn jedoch „/pathOne“ aktiv ist und ich erneut darauf klicke, passiert nichts. </p><p>Gibt es eine Möglichkeit, die Neudarstellung eines Routenelements durch Klicken auf einen aktiven Link zu erzwingen? </p><p>Ich könnte die gesamte Seite aktualisieren, wenn das reloadDocument-Attribut festgelegt wäre, aber das ist keine praktikable Option. </p><p><code></code></p>
P粉295728625P粉295728625472 Tage vor481

Antworte allen(1)Ich werde antworten

  • P粉432906880

    P粉4329068802023-07-28 12:05:00

    If all you really want is for the route component to rerender each time the link to its route is clicked then just have those components call the useLocation hook. Each time the link is clicked a new location object reference is created. The new location object reference is enough to trigger the component using it to be rerendered.

    Example:

    const PathOne = () => {
      useLocation();
    
      useEffect(() => {
        console.log("PathOne rerender");
      });
    
      return <h1>PathOne</h1>;
    };
    
    const PathTwo = () => {
      useEffect(() => {
        console.log("PathTwo rerender");
      });
    
      return <h1>PathTwo</h1>;
    };
    function App() {
      return (
        <div className="App">
          <NavLink to="/pathOne" className="ripple">
            label1
          </NavLink>
          <NavLink to="/pathTwo" className="ripple">
            label2
          </NavLink>
          <Routes>
            <Route path="/pathOne" element={<PathOne />} />
            <Route path="/pathTwo" element={<PathTwo />} />
          </Routes>
        </div>
      );
    }

    Antwort
    0
  • StornierenAntwort