Anna
Anna

Reputation: 1659

How to refresh a Page using react-route Link

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

Answers (7)

Saad5400
Saad5400

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

Gaurav Kumar
Gaurav Kumar

Reputation: 171

You can simply run this after successful query.

window.location.reload();

Upvotes: 14

David Barrows
David Barrows

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

sigmapi13
sigmapi13

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

Ferdousi
Ferdousi

Reputation: 339

You can use this

<a onClick={() => {window.location.href="/something"}}>Something</a>

Upvotes: 6

Jyothi Babu Araja
Jyothi Babu Araja

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

Lukas Liesis
Lukas Liesis

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

Related Questions