Skip to content

Keep the current page rendered as a fallback until the new page is loaded with React.lazy and React.Suspense. Route level code splitting in react without screen flickering (React Suspense React Router Dom React Topbar Progress Indicator)

License

Notifications You must be signed in to change notification settings

asifvora/react-current-page-fallback

Repository files navigation

react-current-page-fallback

Keep the current page rendered as a fallback until the new page is loaded with React.lazy and React.Suspense. Route level code splitting in react without screen flickering (React Suspense React Router Dom React Topbar Progress Indicator)

react-current-page-fallback licence react-current-page-fallback forks react-current-page-fallback stars react-current-page-fallback issues react-current-page-fallback pull-requests

React TypeScript ReactRouter

πŸ› οΈ Installation Steps

Using npm:

npm i --save react-current-page-fallback

Using yarn:

yarn add react-current-page-fallback

πŸ“– Usage

import { FallbackProvider } from "react-current-page-fallback";

// Wrapp root FallbackProvider for all routes
<FallbackProvider>
  your app routes here...
</FallbackProvider>

// Wrapp every page using FallbackPageWrapper 
import { FallbackPageWrapper } from "react-current-page-fallback";

<FallbackPageWrapper>
  your page-1 here...
</FallbackPageWrapper>


<FallbackPageWrapper>
  your page-2 here...
</FallbackPageWrapper>

...

πŸ“‚ Code Example

index.js

import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App";

const container = document.getElementById("root");
const root = createRoot(container); // createRoot(container!) if you use TypeScript

root.render(<><App/></>);

App.js

react-router-dom V6

import React from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { FallbackProvider } from "react-current-page-fallback";

const Home = React.lazy(() => import("./pages/Home"));
const About = React.lazy(() => import("./pages/About"));
const Contact = React.lazy(() => import("./pages/Contact"));

// react-router-dom V6
const App = () => {
  return (
    <Router>
      <div>
        <FallbackProvider>
          <Routes>
            <Route path="/about" element={ <About />} />
            <Route path="/contact" element={ <Contact />} />
            <Route path="/" element={ <Home />} />
          </Routes>
        </FallbackProvider>
      </div>
    </Router>
  );
};
export default App;

App.js

react-router-dom V5

import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import { FallbackProvider } from "react-current-page-fallback";

// react-router-dom V5
const App = () => {
  return (
    <Router>
      <div>
        <FallbackProvider>
          <Switch>
            <Route path="/about">
              <About />
            </Route>
            <Route path="/contact">
              <Contact />
            </Route>
            <Route path="/">
              <Home />
            </Route>
          </Switch>
        </FallbackProvider>
      </div>
    </Router>
  );
};
export default App;

Nav.js

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

export const Nav = () => {
  return (
    <>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link> 
        <Link to="/contact">Contact</Link>
    </>
  );
};

export default Nav;

Home.js

import React from 'react';
import { Nav } from '../components/Nav';
import { FallbackPageWrapper } from "react-current-page-fallback";

const Home  = () => {
  return (
    <FallbackPageWrapper>
      <div>
        <Nav />
        <h1>Home</h1>
      </div>
    </FallbackPageWrapper>
  );
};

export default Home;

About.js

import React from 'react';
import { Nav } from '../components/Nav';
import { FallbackPageWrapper } from "react-current-page-fallback";

const About  = () => {
  return (
    <FallbackPageWrapper>
      <div>
        <Nav />
        <h1>About</h1>
      </div>
    </FallbackPageWrapper>
  );
};

export default About;

Contact.js

import React from 'react';
import { Nav } from '../components/Nav';
import { FallbackPageWrapper } from "react-current-page-fallback";

const Contact  = () => {
  return (
    <FallbackPageWrapper>
      <div>
        <Nav />
        <h1>Contact</h1>
      </div>
    </FallbackPageWrapper>
  );
};

export default Contact;

Preview

Test this using Slow 3G for better results

Example

You can run the example by cloning the repo:

git clone https://github.com/asifvora/react-current-page-fallback.git
yarn
yarn start

πŸ›‘οΈ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘¨β€πŸ’» Author

πŸ‘€ Asif Vora

🍰 Contributing

πŸ™ Support

This project needs a ⭐️ from you. Don't forget to leave a star ⭐️

About

Keep the current page rendered as a fallback until the new page is loaded with React.lazy and React.Suspense. Route level code splitting in react without screen flickering (React Suspense React Router Dom React Topbar Progress Indicator)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published