gpbaculio
gpbaculio

Reputation: 5968

How to navigate on path by button click in react router v4?

I have this paths in react-router-dom:

 <BrowserRouter>
  <div>
  <Route exact path='/(index.html)?' component={Home}/> {/* app = home */}
  <Route  path='/register' component={Registration}/>
  </div>
</BrowserRouter>

everything is working fine, now anywhere in my components I want to change path by onClick, a code like this:

<button onClick={() => history.push('/the/path') }> change path </button>

how can I do that?

Upvotes: 59

Views: 176153

Answers (7)

iliyan
iliyan

Reputation: 1

You can use window.location for this purpose

const LoginClick = () => {
    window.location.href = '/login'; // Directly set the URL to navigate to the login page
  };

<span style={{color:'green', cursor:'pointer'}} onClick={LoginClick}>Log In</span>

like this

Upvotes: 0

Ridvan Saman
Ridvan Saman

Reputation: 11

import { Button } from "@mui/material";
const navigate = useNavigate();
  const submitHandler = (e) => {
    e.preventDefault();
    navigate(`/`);
  };
<Button variant="contained" onClick={submitHandler}>Home Page</Button>

Upvotes: 1

AbdulAzeez Olanrewaju
AbdulAzeez Olanrewaju

Reputation: 1078

in react-router-dom version 6, you can also use the Link component too. This is to back @Abey Bruck's answer

import { Button } from "@chakra-ui/react";
...

const Home = () => {
  return (
    <Button as={Link} to={'/login'}>Login Page</Button>
  )
}

Upvotes: 1

Abey Bruck
Abey Bruck

Reputation: 635

in react-router-dom version 6 use useNavigate

import { useNavigate } from "react-router-dom";
import { Button } from "@mui/material";
...
const navigate = useNavigate();
<Button
   onClick={() => navigate("/your-path-here")}>
click me
</Button>

do not forget to install from mui.com to use the <Button></Button> component

Upvotes: 35

Bruno Ribeiro
Bruno Ribeiro

Reputation: 715

react-router-dom exports a hook called useHistory. Just import it and use it in your component like this:

import React from 'react';
import { useHistory } from 'react-router-dom';

export default () => {
  const history = useHistory();
   
  return (
    <button onClick={() => history.push('/your/path')}>
      Click me
    </button>
  );
};

I'm using:

  • "react": "^16.13.1"
  • "react-router-dom": "^5.2.0"

Check this post for more details: https://ultimatecourses.com/blog/programmatically-navigate-react-router

Upvotes: 45

frogatto
frogatto

Reputation: 29285

If you're using the button only for navigation, you can replace it with <Link />1 and apply a button style.

<Link to='/new/location/'>Click Me</Link>

Or you can use the <NavLink />2.

In case of using Material UI, you can use the following code:

import { Link } from 'react-router-dom'
import Button from '@material-ui/core/Button';

<Button component={Link} to="/new/location/">
  Click Me
</Button>

(1): import {Link} from "react-router-dom";
(2): import {NavLink} from "react-router-dom";

Upvotes: 57

soywod
soywod

Reputation: 4520

import {withRouter} from 'react-router-dom';
...

class App extends React.Component {
  ...

  nextPath(path) {
    this.props.history.push(path);
  }

  render() {
    return (
      <button onClick={() => this.nextPath('/the/path') }>
        change path 
      </button>
    );
  }
}

export default withRouter(App);

Upvotes: 59

Related Questions