Reputation: 1659
I am trying to refresh a page using react-route Link. But the way I have implemented it goes to the URL one step back.(as an example if the URL was ../client/home/register and when I press the reload is goes to ../client/home)
below is my code
const AppErrorPage = () => (
<div>
<div style={ styles.container }>
<h2>Error</h2>
<p> Something went wrong, please reload the page </p>
<div>
<Link to="" refresh="true">
<span>Reload</span>
</Link>
</div>
</div>
</div>
);
Upvotes: 131
Views: 442561
Reputation: 1
My problem with window.location.reload();
is that it does not use client-side rendering. My solution was to do something like this:
// Empty.js
export default function Empty() {
return (<></>);
}
// App.js
<Route path="refresh" element={<Empty />} />
// CustomLink.js
import { Link, useLocation, useNavigate } from "react-router-dom";
export default function CustomLink(props) {
const location = useLocation();
const navigate = useNavigate();
return (
<>
<Link to={props.to} className={props.className} onClick={e => {
e.preventDefault();
if (location.pathname === props.to) {
navigate('refresh');
setTimeout(() => {
navigate(props.to);
}, 100);
}
else {
navigate(props.to);
}
}}>
{props.children}
</Link>
</>
);
}
Upvotes: 0
Reputation: 171
You can simply run this after successful query.
window.location.reload();
Upvotes: 14
Reputation: 778
Here's one way of doing it using React Bootstrap and a component that you can then drop into any page...
import Button from 'react-bootstrap/Button';
export const RefreshCurrentPage = () => {
function refreshPage(){
window.location.reload();
}
return (
<div className="row">
<Button onClick={ refreshPage } variant="secondary" size="sm" className="btn ml-4">Refresh Page</Button>
</div>
);
}
Upvotes: 1
Reputation: 2553
I ended up keeping Link and adding the reload to the Link's onClick event with a timeout like this:
function refreshPage() {
setTimeout(()=>{
window.location.reload(false);
}, 500);
console.log('page to reload')
}
<Link to={{pathname:"/"}} onClick={refreshPage}>Home</Link>
without the timeout, the refresh function would run first
Upvotes: 9
Reputation: 339
You can use this
<a onClick={() => {window.location.href="/something"}}>Something</a>
Upvotes: 6
Reputation: 10292
Try like this.
You must give a function as value to onClick()
You button:
<button type="button" onClick={ refreshPage }> <span>Reload</span> </button>
refreshPage function:
function refreshPage(){
window.location.reload();
}
Upvotes: 45
Reputation: 26413
To refresh page you don't need react-router, simple js:
window.location.reload();
To re-render view in React component, you can just fire update with props/state.
Upvotes: 270