🌐
50 React Coding Puzzles
  • 50 React Coding Puzzles
  • Contact
  • Reviews
  • Table of Contents
  • Introduction
  • 1 - Simple Counter App
  • 2 - Dynamic List of Items with Strikethrough
  • 3 - Color Picker with Hex Code Display
  • 4 - Password Strength Checker
  • 5 - Countdown Timer with Audio
  • 6 - Dynamic Movie List with Filtering and Sorting
  • 7 - Text Animation Component (Fade/Scroll)
  • 8 - Dynamically Generated Text Art
  • 9 - Meme Generator with Custom Text
  • 10 - "What Should I Eat?" Random Recipe Generator
  • 11 - Simple Quiz App with Multiple Choice
  • 12 - Unit Converter
  • 13 - Dynamic Image Gallery with Lightbox
  • 14 - Weather Widget with Temperature and Description
  • 15 - Contact Form with Email and Message Validation
  • 16 - Color Palette Generator
  • 17 - Drag-and-Drop Feature for Rearranging Items
  • 18 - Interactive Quiz with Dynamic Results and Feedback
  • 19 - To-Do List with Task Categorization
  • 20 - Note-Taking App with Markdown Support
  • 21 - Simple Calculator with Basic Operations
  • 22 - Word Scramble Game with Timer and Score
  • 23 - Number Guessing Game
  • 24 - Digital Clock with Time Zone Support
  • 25 - Interactive Time Zone Converter
  • 26 - Weather Forecast App with Location Detection
  • 27 - Real-Time Stock Ticker with Updates
  • 28 - Virtual Dice Roller with Multiple Dice
  • 29 - Responsive Navigation Menu with Dropdowns
  • 30 - Progress Bar for Loading or Task Completion
  • 31 - Modal Window for Alerts and Confirmations
  • 32 - Infinite Scroll for Loading More Content
  • 33 - Form Validation with Error Messages
  • 34 - Search Bar with Filtering and Suggestions
  • 35 - Drag-and-Drop File Upload
  • 36 - Interactive Color Picker with Sliders
  • 37 - Image Carousel with Autoplay
  • 38 - Rating System with Stars or Thumbs Up/Down
  • 39 - Comment Section with Nested Replies
  • 40 - Pagination for Long Lists of Data
  • 41 - Stopwatch app that tracks elapsed time
  • 42 - Responsive E-commerce Product Grid
  • 43 - Random Movie/Book Recommender
  • 44 - Kanban board for managing tasks with drag-and-drop
  • 45 - Chat application with real-time messaging using WebSockets
  • 46 - Calendar that displays events and allows scheduling
  • 47 - Tic-Tac-Toe Game
  • 48 - Hangman Game
  • 49 - Notes App
  • 50 - Expense Tracker
  • Afterword
  • Appendix
Powered by GitBook
On this page
  • Description
  • Algorithm
  • Classes
  • Code
  • Explanation
  • Possible Future Enhancements

17 - Drag-and-Drop Feature for Rearranging Items

Description

Create a React application that displays an ordered list of items and allows users to drag and drop to change the order. The application should visually indicate the drag state and drop target.

Algorithm

  1. Create a state variable to store the list of items.

  2. Define a function to handle the drag start event.

  3. Define a function to handle the drag over event.

  4. Define a function to handle the drop event.

  5. Update the state variable when the user drops an item.

  6. Render the list of items with a drag handle and a drop target indicator.

Classes

  • DraggableItem: A component that represents a single item in the list.

  • DraggableList: A component that renders the list of items and handles the drag and drop events.

Code

DraggableItem.js

import React from 'react';

function DraggableItem({ item, onDragStart, onDragOver, onDrop }) {
  return (
    <div>
      <div
        draggable="true"
        onDragStart={onDragStart}
        onDragOver={onDragOver}
        onDrop={onDrop}
      >
        {item.name}
      </div>
      <div className="drag-handle" />
    </div>
  );
}

export default DraggableItem;

DraggableList.js

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

function DraggableList() {
  const [items, setItems] = useState([
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' },
  ]);
  const [dragging, setDragging] = useState(null);

  const handleDragStart = (item) => {
    setDragging(item);
  };

  const handleDragOver = (item) => {
    // Update the drop target indicator
    const dropTarget = event.target.closest('.draggable-item');
    if (dropTarget) {
      dropTarget.classList.add('drop-target');
    }
  };

  const handleDrop = (item) => {
    // Update the list of items
    setItems(
      items.map((item1) =>
        (item.id === item1.id ? item1 : dragging)
      )
    );
    // Reset the currently dragging item
    setDragging(null);
  };

  return (
    <div>
      {items.map((item) => (
        <DraggableItem
          key={item.id}
          item={item}
          onDragStart={handleDragStart}
          onDragOver={handleDragOver}
          onDrop={handleDrop}
        />
      ))}
    </div>
  );
}

export default DraggableList;

index.css

.draggable-item {
  padding: 10px;
  border: 1px solid #ccc;
  background-color: #fff;
  cursor: move;
}

.drag-handle {
  font-size: 16px;
  cursor: move;
}

.drop-target {
  background-color: #ccc;
}

Explanation

The DraggableItem component represents a single item in the list and handles the drag start, drag over, and drop events. The DraggableList component renders the list of items and handles the drag and drop events. The component uses the useState hook to store the list of items and the currently dragging item. The component updates the list of items when the user drops an item.

Possible Future Enhancements

  • Add more features to the drag and drop functionality (e.g., sorting, grouping).

  • Use a more advanced drag and drop library (e.g., React DnD).

  • Display a placeholder item during the drag operation.

Previous16 - Color Palette GeneratorNext18 - Interactive Quiz with Dynamic Results and Feedback

Last updated 10 months ago