Search code examples
javascriptreactjsreact-routeruirefreshcontrol

React doesn't render without Reloading the page on URL Change


I'm trying to create a dashboard structure, with redirect on button click to different components.

I am able to do the URL change, but still the page doesn't load without a hard reload on that url.

My code as Below : Navigate.JS

import React from 'react';
import {
    BrowserRouter as Router,
    Switch,
    Route,
} from "react-router-dom";
import SalesDashBoard from "./salesDashBoard";
import OrderScreen from "./OrderScreen";


function SDNavigator(){
    return(
        <div>
            <Router>
                <Switch>
                    <Route exact path="/salesDesk" component={SalesDashBoard}/>
                    <Route exact path="/salesDesk/OrderScreen" component={OrderScreen}/>
                </Switch>
            </Router>
        </div>
    )}
export default SDNavigator;

SalesDashBoard.js

import React from 'react';
import {BrowserRouter as Router, Link} from "react-router-dom";
import Button from "@material-ui/core/Button";

function SalesDashBoard() {
    return (
        <Router>
            <div>
                <h3>Dashboard Links</h3>
                    <Button
                        component={Link} to="/salesDesk/OrderScreen"
                        variant="contained"
                        color="primary"
                        type="submit"
                    >
                        Login
                    </Button>
            </div>
        </Router>
    )
}

export default SalesDashBoard;

OrderScreen.js

import React from 'react';

function OrderScreen() {
    return (
        <div Order Screen />
    );
}
export default OrderScreen;

The page is loading when reload after the click is done and URL is changed, without reloading its still showing the Dashboard page.

PS : I have already routing this from App.js -> DashBoard.js, Thats working fine.


Solution

  • Try this

    function SalesDashBoard() {
        return (
          // Remove Router
                <div>
                    <h3>Dashboard Links</h3>
                        <Button
                            component={Link} to="/salesDesk/OrderScreen"
                            variant="contained"
                            color="primary"
                            type="submit"
                        >
                            Login
                        </Button>
                </div>
    
        )
    }