Task manager را با استفاده از react typescript ایجاد کنید

سلام! بیایید با استفاده از برخی ابزارهای مدرن، یک برنامه React ساده اما زیبا بسازیم. ما یک برنامه مدیریت کار خواهیم ساخت که در واقع مفید است و ظاهر مناسبی دارد. هیچ چیز خسته کننده ای نیست – بیایید مستقیم وارد شویم!
راه اندازی پروژه
ابتدا بیایید پروژه خود را ایجاد کنیم. ترمینال خود را باز کنید و اجرا کنید:
npm create vite@latest my-task-app -- --template react-ts
cd my-task-app
حالا بیایید Tailwind CSS را برای استایل اضافه کنیم:
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
پیکربندی سریع
خود را به روز کنید tailwind.config.js
:
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
Tailwind را به خود اضافه کنید src/index.css
:
@tailwind base;
@tailwind components;
@tailwind utilities;
بیایید چیزی جالب بسازیم
ما یک مدیر وظیفه با قابلیت افزودن، تکمیل و حذف کارها ایجاد خواهیم کرد. ابتدا بیایید نوع وظیفه خود را در آن تعریف کنیم src/types.ts
:
export interface Task {
id: number;
text: string;
completed: boolean;
}
اکنون، بیایید برنامه اصلی خود را در آن ایجاد کنیم src/App.tsx
:
import { useState } from 'react'
import { Task } from './types'
function App() {
const [tasks, setTasks] = useState<Task[]>([])
const [newTask, setNewTask] = useState('')
const addTask = () => {
if (!newTask.trim()) return
setTasks([
...tasks,
{
id: Date.now(),
text: newTask,
completed: false
}
])
setNewTask('')
}
const toggleTask = (id: number) => {
setTasks(tasks.map(task =>
task.id === id ? { ...task, completed: !task.completed } : task
))
}
const deleteTask = (id: number) => {
setTasks(tasks.filter(task => task.id !== id))
}
return (
<div className="min-h-screen bg-gray-100 py-8">
<div className="max-w-md mx-auto bg-white rounded-lg shadow-md p-6">
<h1 className="text-2xl font-bold text-center mb-6">Task Manager</h1>
<div className="flex mb-4">
<input
type="text"
value={newTask}
onChange={(e) => setNewTask(e.target.value)}
className="flex-1 p-2 border rounded-l-lg focus:outline-none focus:border-blue-500"
placeholder="Add a new task..."
/>
<button
onClick={addTask}
className="bg-blue-500 text-white px-4 rounded-r-lg hover:bg-blue-600"
>
Add
</button>
</div>
<div className="space-y-2">
{tasks.map(task => (
<div
key={task.id}
className="flex items-center p-3 bg-gray-50 rounded-lg"
>
<input
type="checkbox"
checked={task.completed}
onChange={() => toggleTask(task.id)}
className="mr-3"
/>
<span className={`flex-1 ${task.completed ? 'line-through text-gray-500' : ''}`}>
{task.text}
</span>
<button
onClick={() => deleteTask(task.id)}
className="text-red-500 hover:text-red-700"
>
Delete
</button>
</div>
))}
</div>
</div>
</div>
)
}
export default App
اجرای برنامه
سرور توسعه را راه اندازی کنید:
npm run dev
همین! اکنون یک مدیر وظیفه کاربردی با ظاهری تمیز و مدرن دارید. در اینجا چیزی است که ما ساخته ایم:
- یک طرح پاسخگو با طراحی کارت مرکزی
- فیلد ورودی با دکمه افزودن متصل
- لیست وظایف با تغییر و حذف تکمیل
- انیمیشن ها را تمیز کنید و حالت های شناور را انجام دهید
- TypeScript برای ایمنی نوع
- یک ظاهر طراحی مدرن با Tailwind CSS
ساختن آن حتی بهتر
می خواهید آن را بیشتر ببرید؟ در اینجا چند پیشرفت سریع وجود دارد که می توانید اضافه کنید:
- فضای ذخیرهسازی محلی را برای کارهای مداوم اضافه کنید:
// Add and update to App.tsx
// Initialize state with a function that checks localStorage
const [tasks, setTasks] = useState<Task[]>(() => {
const savedTasks = localStorage.getItem('tasks')
return savedTasks ? JSON.parse(savedTasks) : []
})
const [newTask, setNewTask] = useState('')
// Only need one useEffect to handle updates
useEffect(() => {
localStorage.setItem('tasks', JSON.stringify(tasks))
}, [tasks])
// Rest of your code remains the same
- اضافه کردن پشتیبانی از صفحه کلید:
// Add to input element
onKeyPress={(e) => {
if (e.key === 'Enter') addTask()
}}
همین! اکنون یک برنامه React مدرن دارید که در واقع مفید است و ظاهر خوبی دارد. بهترین قسمت؟ این با ابزارهای مدرن و بهترین شیوه ها ساخته شده است، اما همه چیز را ساده و قابل نگهداری نگه می دارد.
می خواهید آزمایش کنید؟ سعی کنید دستهها، تاریخهای سررسید یا سطوح اولویت را اضافه کنید تا مفیدتر شود!
به یاد داشته باشید: کد خوب لازم نیست پیچیده باشد. آن را ساده، خوانا و کاربردی نگه دارید! 🚀