How to Display a List of Items in React

Advertisement

React is a popular JavaScript library for building user interfaces. It provides a flexible and efficient way to render and update UI components. One common requirement in web development is to display a list of items in a React application. In this article, we will explore different approaches to achieve this task.

1. Display an Array of Strings

If you have a simple list of items represented as strings, React provides a straightforward way to display them. Here’s an example:

import React from 'react';

const ItemList = () => {
  const items = ['Item 1', 'Item 2', 'Item 3'];

  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
};

export default ItemList;

In the code snippet above, we define an array called items that contains three string elements. Using the map function, we iterate over each item in the array and render it as an <li> element within an unordered list (<ul>). The key prop is important to provide a unique identifier for each item in the list.

2. Simple Displaying an Array of Objects

If your list of items is represented as an array of objects, you can display them without creating a separate component for each item. Here’s an example:

import React from 'react';

const ItemList = () => {
  const objectItems = [
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' },
  ];

  return (
    <ul>
      {items.map((item) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
};

export default ItemList;

In this example, each item in the items array is an object with properties such as id and name. By mapping over the items array, we create an <li> element for each item, and we display the item’s name property within it. The key prop is used to provide a unique identifier for each item.

3. Displaying an Array of Objects Using a Child Component

In some cases, it may be beneficial to create a separate component for each item, especially if the items have more complex structures or require additional functionality. Here’s an example:

import React from 'react';

const ItemList = () => {
  const items = [
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' },
  ];

  return (
    <ul>
      {items.map((item) => (
        <ListItem key={item.id} item={item} />
      ))}
    </ul>
  );
};

const ListItem = ({ item }) => {
  return <li>{item.name}</li>;
};

export default ItemList;

In this example, we define a separate ListItem component to represent each item in the list. The ItemList component maps over the items array and renders a ListItem component for each item, passing the item object as a prop. Inside the ListItem component, we access the name property of the item and display it within an <li> element.

4. Using External Data Sources

In real-world scenarios, the list of items is often fetched from external data sources, such as APIs. React provides the necessary tools to handle asynchronous data fetching using lifecycle methods or hooks. Here’s an example using the useEffect hook and the fetch API:

import React, { useEffect, useState } from 'react';

const ItemList = () => {
  const [externalItems, setExternalItems] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/posts")
      .then((response) => response.json())
      .then((data) => setExternalItems(data));
  }, []);

  return (
    <ul>
      {externalItems &&
        externalItems.map((item) => (
          <li key={item.id}>
            {item.id}. {item.title}
          </li>
        ))}
    </ul>
  );
};

export default ItemList;

In this code snippet, we use the useEffect hook to make an API request and fetch the list of items. The fetched data is stored in the items state using the useState hook. Once the data is retrieved, we map over the items array and render each item as an <li> element. The key prop is crucial to provide a unique identifier for efficient rendering and updates.

5. Using a Table to Display an Array of Items

If your list of items has a tabular structure, you might want to consider displaying them in a table format. This can be achieved using the map function as well:

import React from 'react';

const tableCardsItems = [
  {
    id: 1,
    name: 'Item 1',
    imageUrl: 'https://example.com/item1.jpg',
    description: 'This is the description of item 1.',
  },
  {
    id: 2,
    name: 'Item 2',
    imageUrl: 'https://example.com/item2.jpg',
    description: 'This is the description of item 2.',
  },
  {
    id: 3,
    name: 'Item 3',
    imageUrl: 'https://example.com/item3.jpg',
    description: 'This is the description of item 3.',
  },
];


const ItemTable = ({ tableCardsItems}) => {
  return (
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>Name</th>
        </tr>
      </thead>
      <tbody>
        {tableCardsItems.map(item => (
          <tr key={item.id}>
            <td>{item.id}</td>
            <td>{item.name}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
};

export default ItemTable;

In the code snippet above, we create a table structure using the <table>, <thead>, <tbody>, and <tr> elements. Each item is displayed in a row (<tr>) and its properties, such as ID and name, are placed in separate table cells (<td>).

3. Using a Grid or Card Layout

If you prefer a more visually appealing layout for your list of items, you can use a grid or card layout. This is especially useful when displaying images or additional information alongside each item. Here’s an example using the CSS Grid system:

import React from 'react';
import './ItemList.css';

const tableCardsItems = [
  {
    id: 1,
    name: 'Item 1',
    imageUrl: 'https://example.com/item1.jpg',
    description: 'This is the description of item 1.',
  },
  {
    id: 2,
    name: 'Item 2',
    imageUrl: 'https://example.com/item2.jpg',
    description: 'This is the description of item 2.',
  },
  {
    id: 3,
    name: 'Item 3',
    imageUrl: 'https://example.com/item3.jpg',
    description: 'This is the description of item 3.',
  },
];

const ItemGrid = ({ tableCardsItems }) => {
  return (
    <div className="item-grid">
      {items.map(item => (
        <div key={item.id} className="item-card">
          <img src={item.imageUrl} alt={item.name} />
          <h3>{item.name}</h3>
          <p>{item.description}</p>
        </div>
      ))}
    </div>
  );
};

export default ItemGrid;

In the code snippet above, we define a grid layout using CSS classes (item-grid and item-card). Each item is rendered within a <div> with a unique key and styled as a card. You can apply CSS rules to customize the appearance of the grid and cards according to your needs.

author's bio photo

Hi there! I am Avic Ndugu.

I have published 100+ blog posts on HTML, CSS, Javascript, React and other related topics. When I am not writing, I enjoy reading, hiking and listening to podcasts.