Reputation: 5968
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
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
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
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
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
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:
Check this post for more details: https://ultimatecourses.com/blog/programmatically-navigate-react-router
Upvotes: 45
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
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