🌐
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

49 - Notes App

Description

Create a Notes App that displays a list of existing notes, enables adding new notes with title and content, allows editing existing notes, and provides functionality to delete notes.

Algorithm

  1. Display a list of existing notes

  2. Allow users to add new notes with title and content

  3. Enable editing of existing notes

  4. Provide functionality to delete notes

Classes

  • NotesApp: The main app component

  • Note: A single note component

  • NoteForm: The form component for adding and editing notes

Code

NotesApp.js

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

const NotesApp = () => {
  const [notes, setNotes] = useState([]);
  const [currentNote, setCurrentNote] = useState(null);

  useEffect(() => {
    const storedNotes = localStorage.getItem('notes');
    if (storedNotes) {
      setNotes(JSON.parse(storedNotes));
    }
  }, []);

  const handleAddNote = (note) => {
    setNotes((prevNotes) => [...prevNotes, note]);
    localStorage.setItem('notes', JSON.stringify(notes));
  };

  const handleEditNote = (note) => {
    const updatedNotes = notes.map((n) => ((link unavailable) === (link unavailable) ? note : n));
    setNotes(updatedNotes);
    localStorage.setItem('notes', JSON.stringify(notes));
  };

  const handleDeleteNote = (noteId) => {
    const updatedNotes = notes.filter((n) => (link unavailable) !== noteId);
    setNotes(updatedNotes);
    localStorage.setItem('notes', JSON.stringify(notes));
  };

  return (
    <div>
      <h1>Notes App</h1>
      <ul>
        {notes.map((note) => (
          <Note
            key={(link unavailable)}
            note={note}
            onEdit={() => setCurrentNote(note)}
            onDelete={() => handleDeleteNote((link unavailable))}
          />
        ))}
      </ul>
      {currentNote && (
        <NoteForm
          note={currentNote}
          onSave={(note) => handleEditNote(note)}
          onCancel={() => setCurrentNote(null)}
        />
      )}
      <button onClick={() => setCurrentNote({ title: '', content: '' })}>
        Add New Note
      </button>
    </div>
  );
};

export default NotesApp;

Note.js

import React from 'react';

const Note = ({ note, onEdit, onDelete }) => {
  return (
    <li>
      <h2>{note.title}</h2>
      <p>{note.content}</p>
      <button onClick={onEdit}>Edit</button>
      <button onClick={onDelete}>Delete</button>
    </li>
  );
};

export default Note;

NoteForm.js

import React from 'react';

const NoteForm = ({ note, onSave, onCancel }) => {
  const [title, setTitle] = useState(note.title);
  const [content, setContent] = useState(note.content);

  const handleSubmit = (event) => {
    event.preventDefault();
    onSave({ id: (link unavailable), title, content });
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>Title:</label>
      <input
        type="text"
        value={title}
        onChange={(e) => setTitle(e.target.value)}
      />
      <br />
      <label>Content:</label>
      <textarea
        value={content}
        onChange={(e) => setContent(e.target.value)}
      />
      <br />
      <button type="submit">Save</button>
      <button onClick={onCancel}>Cancel</button>
    </form>
  );
};

export default NoteForm;

Explanation

This code creates a Notes App that displays a list of existing notes, enables adding new notes with title and content, allows editing existing notes, and provides functionality to delete notes.

Possible Future Enhancements

  • Search functionality: Add a search bar to search for notes by title or content.

  • Tagging system: Allow users to add tags to notes for better organization.

  • Note sharing: Add functionality to share notes with other users.

  • Note encryption: Add encryption to notes for secure storage.

Previous48 - Hangman GameNext50 - Expense Tracker

Last updated 10 months ago