ホームページ >ウェブフロントエンド >CSSチュートリアル >React を使用してテーマ切り替えを使用して Todo アプリを構築する
このチュートリアルでは、React を使用して Todo リスト Web アプリケーション を構築します。このプロジェクトは、React での状態管理、イベント処理、リストの操作を理解するのに役立ちます。 React 開発のスキルを強化したい初心者に最適です。
Todo リスト アプリケーションを使用すると、ユーザーはタスクを追加したり、完了済みとしてマークしたり、削除したりできます。日常のタスクを管理するためのクリーンなインターフェイスを提供します。このプロジェクトでは、React を使用してシンプルでありながら動的なアプリケーションの状態を管理する方法を紹介します。
プロジェクトの構造は、典型的な React プロジェクトのレイアウトに従います。
├── public ├── src │ ├── components │ │ ├── TodoList.jsx │ │ ├── TodoItem.jsx │ ├── App.jsx │ ├── App.css │ ├── index.js │ └── index.css ├── package.json └── README.md
このコンポーネントは、新しいタスクの追加やリストのレンダリングなど、todo リスト全体の状態を処理します。
import { useState, useEffect } from "react"; import TodoItem from "./TodoItem"; const TodoList = () => { const [task, setTask] = useState(""); const [tasks, setTasks] = useState([]); useEffect(() => { const savedTasks = JSON.parse(localStorage.getItem("tasks")) || []; setTasks(savedTasks); }, []); useEffect(() => { localStorage.setItem("tasks", JSON.stringify(tasks)); }, [tasks]); const addTask = () => { if (task.trim()) { setTasks([...tasks, { text: task, completed: false }]); setTask(""); } }; const toggleCompletion = (index) => { const newTasks = tasks.map((t, i) => i === index ? { ...t, completed: !t.completed } : t ); setTasks(newTasks); }; const deleteTask = (index) => { const newTasks = tasks.filter((_, i) => i !== index); setTasks(newTasks); }; return ( <div classname="todo-list"> <h1>Todo List</h1> <input type="text" value="{task}" onchange="{(e)"> setTask(e.target.value)} placeholder="Add a new task" /> <button onclick="{addTask}">Add Task</button> <ul> {tasks.map((t, index) => ( <todoitem key="{index}" task="{t}" index="{index}" togglecompletion="{toggleCompletion}" deletetask="{deleteTask}"></todoitem> ))} </ul> </div> ); }; export default TodoList;
TodoItem コンポーネントは、各タスクの表示と、タスクを完了としてマークするか削除するオプションを管理します。
const TodoItem = ({ task, index, toggleCompletion, deleteTask }) => { return (
このコンポーネントでは、親 TodoList から props を受け取り、タスクの完了の切り替えやタスクの削除などのアクションを処理します。
App.jsx はアプリケーションのルートとして機能し、TodoList コンポーネントをレンダリングします。
import { useState } from "react"; import "./App.css"; import TodoList from './components/TodoList'; import sun from "./assets/images/icon-sun.svg"; import moon from "./assets/images/icon-moon.svg"; const App = () => { const [isLightTheme, setIsLightTheme] = useState(false); const toggleTheme = () => { setIsLightTheme(!isLightTheme); }; return ( <div classname="{isLightTheme" :> <div classname="app"> <div classname="header"> <div classname="title"> <h1>TODO</h1> </div> <div classname="mode" onclick="{toggleTheme}"> <img src="%7BisLightTheme" moon : sun alt="React を使用してテーマ切り替えを使用して Todo アプリを構築する"> </div> </div> <todo></todo> <div classname="footer"> <p>Made with ❤️ by Abhishek Gurjar</p> </div> </div> </div> ); }; export default App;
CSS により、ToDo リスト アプリケーションがユーザーフレンドリーで応答性が高いことが保証されます。
* { box-sizing: border-box; } body { margin: 0; padding: 0; font-family: Josefin Sans, sans-serif; } .app { width: 100%; height: 100vh; background-color: #161722; color: white; background-image: url(./assets//images/bg-desktop-dark.jpg); background-repeat: no-repeat; background-size: contain; background-position-x: center; background-position-y: top; display: flex; align-items: center; justify-content: flex-start; flex-direction: column; } .header { width: 350px; margin-top: 20px; display: flex; align-items: center; justify-content: space-between; } .title h1 { font-size: 30px; letter-spacing: 7px; } .mode { display: flex; align-items: center; justify-content: center; } .mode img { width: 22px; } .todo { width: 350px; flex-direction: column; display: flex; align-items: center; justify-content: flex-start; } .input-box { border-bottom: 1px solid white; display: flex; align-items: center; justify-content: center; background-color: #25273c; width: 100%; gap: 10px; padding: 8px; border-radius: 10px; } .check-circle { width: 12px; height: 12px; border-radius: 50%; border: 1px solid white; display: flex; align-items: center; justify-content: center; background-image: linear-gradient(to right,hsl(230, 50%, 20%) , hsl(280, 46%, 28%)); } .input-task { width: 90%; border: none; color: white; background-color: #25273c; } .input-task:focus { outline: none; } .todo-list { margin-top: 20px; width: 350px; background-color: #25273c; } .todo-box { margin-inline: 15px; margin-block: 10px; width: 100%; display: flex; align-items: center; justify-content: flex-start; gap: 15px; } .todo-box .cross{ width: 14px; } .details { margin-bottom: 40px; border-bottom: 1px solid white; width: 350px; display: flex; align-items: center; justify-content: space-evenly; background-color: #25273c; font-size: 12px; padding: 12px; border-bottom-right-radius: 7px; border-bottom-left-radius: 7px; } .details .clickBtn{ cursor: pointer; } .details .clickBtn:hover{ color: #3074fd; } /* //light Theme */ .light-theme .app { background-color: #fff; color: #000; background-image: url(./assets//images/bg-desktop-light.jpg); } .light-theme .header { color: white; } .light-theme .input-box{ background-color: white; color: black; border-bottom: 1px solid black; } .light-theme input{ background-color: white; color: black; } .light-theme .check-circle{ border:1px solid black; } .light-theme .todo-list{ background-color: white; color: black; } .light-theme .details{ border-bottom: 1px solid black; background-color: white; color: black; } .footer{ margin: 40px; }
このスタイルにより、タスク管理を可能にしながら、ToDo リストがシンプルかつクリーンになります。
まず、リポジトリのクローンを作成し、依存関係をインストールします。
git clone https://github.com/abhishekgurjar-in/todo_list.git cd todo-list npm install npm start
アプリケーションは http://localhost:3000 で実行を開始します。
ここで Todo リストのライブデモをチェックしてください。
Todo List プロジェクトは、React で状態、リスト、イベント処理を操作する練習をするのに最適な方法です。 localStorage を使用してセッション間でデータを保持できる便利なアプリケーションを構築する方法を示します。
Abhishek Gurjar は、情熱的な Web 開発者です。 GitHub で彼のプロジェクトをさらにチェックできます。
以上がReact を使用してテーマ切り替えを使用して Todo アプリを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。