0

I want routing facility in my App so I have use react-router-dom for it. I have a checkout button which on clicking should redirect to <Checkout/> page but only the url is changing & not directing to the checkout page until unless user refreshes manually. Here's my code:

App.js

import "./App.css";
import Header from "./Header";
import Home from "./Home";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Checkout from "./Checkout";

function App() {
  return (
    <Router>
      <div className="App">
        <Switch>
          <Route exact path="/checkout">
            <Header />
            <Checkout />
          </Route>
          <Route path="/">
            <Header />
            <Home />
          </Route>
        </Switch>
      </div>
    </Router>

    // header
    // home
  );
}

export default App;

Checkout Button (Header.js):

import React from "react";
import "./Header.css";
import { GrSearch } from "react-icons/gr";
import { MdShoppingBasket } from "react-icons/md";
import { Link, useHistory} from "react-router-dom";
import { useStateValue } from "./StateProvider";

const Header = () => {
  const [{ basket }, dispatch] = useStateValue();
  const history = useHistory();

  return (
    <div className="header">
      <Link to="/">
        <img
          className="header__logo"
          src="http://pngimg.com/uploads/amazon/amazon_PNG11.png"
          alt=""
        ></img>
      </Link>
      <div className="header__search">
        <input className="header__searchInput" type="text"></input>
        <GrSearch className="header__searchIcon" />
      </div>
      <div className="header__nav">
        <div className="header__option">
          <span className="header__optionLineOne">Hello Guest </span>
          <span className="header__optionLineTwo">Sign In</span>
        </div>
        <div className="header__option">
          <span className="header__optionLineOne">Returns </span>
          <span className="header__optionLineTwo">& Orders</span>
        </div>
        <div className="header__option">
          <span className="header__optionLineOne">Your </span>
          <span className="header__optionLineTwo">Prime</span>
        </div>
        <Link to="/checkout">
          <div className="header__optionBasket">
            <MdShoppingBasket onClick={ ()=> history.push("/checkout")}/>
            <span className="header__optionLineTwo  header__basketCount">
              {basket?.length}
            </span>
          </div>
        </Link>
      </div>
    </div>
  );
};

export default Header;

May anyone tell me why it's not redirecting to checkout page. I am using React-router-dom v5.2.0

Thanks

  • A [similar question](https://stackoverflow.com/q/72928701/18057908) was asked few days ago. Removing `` resolved the problem. Does this also apply to your problem? – Palladium02 Jul 18 '22 at 08:14
  • Try out to add `exact` prop to the home route `` – Boussadjra Brahim Jul 18 '22 at 08:28
  • What version of React are you using? Are you using React 18? Does this help answer your question? https://stackoverflow.com/a/71833424/8690857 – Drew Reese Jul 18 '22 at 20:51
  • @Palladium02 Removing `React.StrictMode` is almost ***never*** the correct answer to a React rendering issue. In the case of the post you linked to, OP was using React 18 and an outdated version of `react-router-dom` that had an issue with React 18. See the marked duplicate for issue explanation and possible solutions. – Drew Reese Jul 18 '22 at 20:54

0 Answers0