Implementing Skeleton Components in React / Blogs / Perficient


In our last blog, we have gone through the concept of what is skeleton component in React. Now we will continue to implement skeleton component in React.

The component supports 4 shape variants:

  • text(default): represents a single line of text (you can adjust the height via font size).
  • circular, rectangular, and rounded: come with different border radius to let you take control of the size.

Implementing Skeleton Components

Let’s get started with creating one skeleton component.

Step 1: 

You will have to install the @mui/material module in your react project.

npm install @mui/material

npm i @emotion/react @emotion/styled

Step 2: 

We will be creating one skeleton component for text. Open App.js file and add below code

import { Skeleton } from "@mui/material";
import React from "react";
  
export default function App() {
    return (
        <div>
            <h4>
                Skeleton component for Text
            </h4>
            <Skeleton variant="text" width={200} height={50} />
        </div>
    );
}

Here we can add width and height for the skeleton. Output will be like this:

Text Skeleton

Similarly for Rectangle, Circle and Rounded component variant, we can add skeleton code as below.

<Skeleton variant=”rectangular” width={300} height={100} />

<Skeleton variant=”circular” width={40} height={40} />

<Skeleton variant=”rounded” width={210} height={60} />

Now let’s create a skeleton component for real-time data. For this we will be using one React plugin react-content-loader

Now What is React-Content-Loader?

react-content-loader is a React component library used to create placeholder loading states, often referred to as “skeleton screens” or “skeleton loaders.” The library provides a set of customizable components that mimic the structure of your actual content while it’s loading. This helps maintain the overall layout of a page and provides a better user experience compared to a blank or empty space.

Here’s a basic example of using react-content-loader:

Step 1: npm install react-content-loader

Step 2: Create one SkeletonComponent.js file and add the code below

import React from 'react';
import ContentLoader from 'react-content-loader';

const SkeletonComponent = () => (
  <ContentLoader
    speed={4}
    width={400}
    height={200}
    viewBox="0 0 400 200"
    backgroundColor="#f3f3f3"
    foregroundColor="#ecebeb">

    <rect x="0" y="0" rx="3" ry="3" width="400" height="10" />
    <rect x="0" y="20" rx="3" ry="3" width="400" height="10" />
    <rect x="0" y="40" rx="3" ry="3" width="400" height="10" />
    <rect x="0" y="60" rx="3" ry="3" width="400" height="10" />
    <rect x="0" y="80" rx="3" ry="3" width="400" height="10" />
    <rect x="0" y="100" rx="3" ry="3" width="400" height="10" />
    {/* Add more shapes as needed */}
  </ContentLoader>
  
);

export default SkeletonComponent;

Step 3: Create one file as DataList.js and add below code

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

const DataList = () => {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch('https://jsonplaceholder.typicode.com/posts');
        const result = await response.json();
        setData(result);
      } catch (error) {
        console.error('Error fetching data:', error);
      } finally {
        setLoading(false);
      }
    };
    fetchData();
  }, []);

  return (
    <div>
      {loading ? (
        <SkeletonComponent />
      ) : (
        <ul>
          {data?.map(post => (
            <li key={post.id}>{post.title}</li>
          ))}
        </ul>
      )}
    </div>
  );
};

export default DataList;

Step 4: In the App.js, add below code

import React from 'react';
import DataList from './DataList';

const App = () => {
  return (
    <div>
      <h1>Data List</h1>
      <DataList />
    </div>
  );
};

export default App;

Data List Image

Data List Image

In this way, we can use the react-content-loader tool to enhance the user experience by providing a visual representation of content loading.

By using a Skeleton Component, react applications can manage loading states gracefully, contributing to a more engaging and user-friendly interface.

Thanks for reading !!!





Source link

Social media & sharing icons powered by UltimatelySocial
error

Enjoy Our Website? Please share :) Thank you!