DEV Community

Samuel Urah Yahaya
Samuel Urah Yahaya

Posted on

Creating a React Loader: Adding a Dash of Style to Your Website

Hey there, fellow tech enthusiasts! πŸ‘‹ Ever wondered how those fancy loading animations on websites are created? You're in luck because today, I'm going to walk you through the process of creating a sleek React loader that not only keeps your users engaged but also adds a touch of style to your web app.

The Need for a Loader

We've all been there – waiting for a web page to load, and it feels like an eternity. That's where a loader comes in. It's a visual cue that tells your users, "Hold on, we're preparing something awesome for you!" It's a simple yet effective way to enhance the user experience.

Setting the Stage

Before we dive into code, let's set the stage. Imagine we're building a portfolio website using React. We want to create a loading animation that welcomes users while our content loads in the background. The animation should be modern and eye-catching. In this article, we have decided to go with a Windows-like loader, but with a little difference.

Enter React and CSS

To achieve our goal, we'll harness the power of React for our web app and use Cascading Style Sheets (CSS) to craft the loading animation.

Creating the Loader Component

First, we'll create a separate React component for our loader. Here's a snippet of what it looks like:

import React from 'react';

function Loader() {
  return (
    <div className="loading-container">
      <div className="loading-spinner"></div>
    </div>
  );
}

export default Loader;
Enter fullscreen mode Exit fullscreen mode

In this Loader component, we've used two div elements to structure our loader. The outer div has a class of loading-container, and the inner one is our actual spinner with the class loading-spinner.

Styling with CSS Magic

Now, let's sprinkle some CSS magic to make our loader visually appealing. We'll create a spinning circle animation reminiscent of the Windows 10 loading animation. Here's a snippet of the CSS:

body {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-flow: column;
    height: 100vh;
    margin: 0;
    background-color: #0078d4; /* Windows 10 blue color */
}

.loading-container {
    width: 60px;
    height: 60px;
    background-color: transparent;
    display: flex;
    justify-content: center;
    align-items: center;
    border: 4px solid rgba(0, 0, 0, 0.05);
    border-radius: 50%;
}

.loading-spinner {
    width: 60px;
    height: 60px;
    background-color: transparent;
    display: flex;
    justify-content: center;
    align-items: center;
    border: 4px solid transparent;
    border-top: 4px solid #fff; /* White color for the spinner */
    border-radius: 50%;
    animation: spin 1.3s linear infinite; /* Spinning animation */
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
Enter fullscreen mode Exit fullscreen mode

Here, we've defined the styling for our loader and added a delightful spinning animation to the loading-spinner class. This animation creates the circular loading effect that we desire.

Bringing It All Together

To use our loader in our web app, we conditionally render it using a ternary operator. We'll simulate loading for a few seconds before displaying the main content.

import React, { useState, useEffect } from 'react';
import Loader from './Loader';

function App() {
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    // Simulate loading by setting isLoading to false after a few seconds
    setTimeout(() => {
      setIsLoading(false);
    }, 3000); // Simulating a 3-second loading time
  }, []);

  return (
    <div className="App">
      {isLoading ? <Loader /> : <MainContent />}
    </div>
  );
}

function MainContent() {
  return (
    <div>
      {/* Your main content goes here */}
      <h1>Welcome to My Portfolio</h1>
      <p>This is the main content of your website.</p>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

In our main component (App.js), we set up a loading delay using useEffect and conditionally render the loader using the ternary operator. Once the loading is complete, we reveal our main content.

Conclusion

And there you have it, folks! We've created a stunning React loader that not only serves a practical purpose but also adds a dash of style to your website. With this loader in place, your users will appreciate the thought and effort you've put into enhancing their browsing experience.

Stay creative, keep coding, and don't forget to innovate! πŸ’ͺπŸš€

Feel free to adapt and customize this loader for your own projects. Happy coding! 😊

Top comments (1)

Collapse
 
samy profile image
Samuel Urah Yahaya

Thanks for reading...
If you want, you can check out this loader in real-time, in your own browser.

Use My BrowserIDE, a fast and lightweight IDE in your browser.