Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
React Router <Link> changes URL but does not automatically render component

I'm attempting to use React Router to allow a button in my NavBar to change the view when a button is clicked. Specifically, I want an "Upload" button to change the URL to /upload and render the UploadPage component.

Currently, the URL will change, but the view does not automatically render, and the 'old' component is still visible. I need to manually reload the page or go to the URL directly for the view to load. How can I stop this behaviour so that it automatically renders without manual reload?

App.js:

import { Component } from "react";
import Home from "../src/components/Component/Home/Home";
import Header from "./components/Component/Header/Header";
import UploadPage from "./components/Component/VideoUpload/VideoUpload";
import { BrowserRouter, Switch, Route } from "react-router-dom";

class App extends Component {
  render() {
    return (
      <BrowserRouter>
        <Header />
        <Switch>    
          <Route path="/" exact component={Home} />
          <Route
            path="/video/:videoId"
            component={Home}
            render={(routerProps) => <Home {...routerProps} />
          />
          <Route path="/upload" component={UploadPage} />
        </Switch>
      </BrowserRouter>
    );
  }
}

export default App;

Header.js (This is a snippet of just the button in the NavBar)

import { Link } from "react-router-dom";

const Header = () => {
    return (
        //NavBar code here...

        <Link to="/upload">
        <button>
            <img draggable="false" src={uploadIcon} alt="upload-icon" />
            UPLOAD
        </button>
        </Link>
    );
};

VideoUpload.js

import React from "react";

const VideoUpload = () => {
  return (
    <section className="uploadContainer">
      <section className="uploadContainer__titleContainer">
        <h2 className="uploadContainer__title">Upload Video</h2>
      </section>
    </section>
  );
};

export default VideoUpload;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

After a lot of trial and error and research, I found that in my index.js:

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

Should be changed to:

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

From my tests, <BroswerRouter> isn't necessary here and <App /> doesn't need to be wrapped for it to work, but, I'm keeping it wrapped just in case.

This fixes the issues I was experiencing.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda