آموزش ساخت Todo List در React؛ تمرین عملی ترکیب useState، map و رویداد onClick برای افزودن و نمایش کارهای روزانه با کد کامل و توضیح گامبهگام.
Todo List یکی از بهترین تمرینها برای ترکیب مفاهیم پایه React است: state با useState، رویداد کلیک، رندر لیست با map و key برای هر آیتم. در این آموزش یک لیست کارهای روزانه میسازیم که کاربر بتواند آیتم جدید اضافه کند و بلافاصله در صفحه ببیند.
| مفهوم | کاربرد در Todo List |
|---|---|
useState | نگهداری آرایه todoها |
onClick | افزودن آیتم با کلیک دکمه |
map | نمایش هر todo در <li> |
key | شناسایی یکتا هر آیتم در لیست |
input وارد میکند.map در <ul> نمایش داده میشود.import { useState } from "react";
export default function TodoList() {
const [todos, setTodos] = useState([]);
function clickHandler() {
const inputElement = document.getElementById("todoInput");
const newTodo = inputElement.value;
if (newTodo.trim() === "") return;
setTodos(todos.concat(newTodo));
inputElement.value = "";
}
return (
<div>
<h2>لیست کارهای روزانه</h2>
<input
type="text"
placeholder="تودوی خود را وارد کنید"
id="todoInput"
/>
<button onClick={clickHandler}>اضافه کنید</button>
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo}</li>
))}
</ul>
</div>
);
}document.getElementById("todoInput") — input را از DOM میگیرد.
در React معمولاً از Controlled Component (state برای value input) استفاده میشود؛ این روش برای تمرین اولیه قابل قبول است.
مقدار input در newTodo ذخیره میشود.
setTodos(todos.concat(newTodo)) — آرایه جدید ساخته و state بهروز میشود.
input خالی میشود تا کاربر todo بعدی را بنویسد.
// روش ۱: concat
setTodos(todos.concat(newTodo));
// روش ۲: Spread Operator (رایجتر)
setTodos([...todos, newTodo]);هر دو روش آرایه جدید میسازند؛ React تغییر state را تشخیص میدهد و دوباره رندر میکند.
value + onChange).index، برای هر todo یک id بسازید.filter روی آرایه.onKeyDown روی input.Todo List پل ارتباطی بین مفاهیم جداگانه React است. با useState داده را نگه دارید، با رویداد آن را تغییر دهید و با map نمایش دهید. همین الگو پایه پروژههای بزرگتر — از سبد خرید تا مدیریت وظایف — است. پس از تسلط بر این نسخه، سراغ Controlled Component و حذف/ویرایش آیتم بروید.