Thuta Learning
ရှာဖွေရန်
ProjectsWeb Developmentintermediate

Project: Task Tracker Setup

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Project: Task Tracker Setup ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ mini project series မှာ Task Tracker app တစ်ခုကို အဆင့်လိုက် build လုပ်ကြမှာပါ။ Part 1 မှာတော့ app ရဲ့ skeleton structure ကို components အဖြစ်ခွဲပြီး props နဲ့ data ကို parent ကနေ child ကို ဘယ်လိုပို့မလဲဆိုတာ ပြန်လေ့ကျင့်ပါမယ်။ TaskTracker (parent) component တစ်ခုက task list state ကို hold လုပ်ပြီး၊ TaskItem (child) component က task တစ်ခုချင်းစီကို UI ပေါ်မှာ render လုပ်ပါတယ်။ ဒီအဆင့်မှာ real feature (add/delete) မထည့်သေးဘဲ static sample data နဲ့ layout ကိုပဲ အာရုံစိုက်ဆောက်မှာပါ။ Component boundary ကို ကောင်းကောင်းပိုင်းထားရင် နောက် part တွေမှာ feature ထပ်ထည့်တာ အများကြီးလွယ်သွားပါလိမ့်မယ်။

လက်တွေ့ ဆောက်ကြည့်မယ်

src/components/ ထဲမှာ TaskTracker.jsx နဲ့ TaskItem.jsx ဆိုပြီး file နှစ်ခု ဆောက်ပါ။ TaskTracker မှာ useState နဲ့ sample task array (id, text, done fields ပါတဲ့ object list) တစ်ခု ကြိုထားပါ။ .map() သုံးပြီး task list ကို TaskItem တစ်ခုချင်းစီအဖြစ် render လုပ်ပါ - key prop အဖြစ် task.id ကို ပေးဖို့မမေ့ပါနဲ့။ TaskItem က task text, done status ကို props အနေနဲ့ လက်ခံပြီး done ဖြစ်ရင် strikethrough style ပြပါ (conditional class name သုံးပါ)။ App.jsx ထဲမှာ TaskTracker ကို import ခေါ်သုံးပြီး app ကို run ကြည့်ပါ။

Code နမူနာ

javascript
// src/components/TaskItem.jsx
function TaskItem({ text, done }) {
  return (
    <li className={done ? "task-item done" : "task-item"}>
      <span>{text}</span>
      {done && <span className="badge">Done</span>}
    </li>
  );
}

export default TaskItem;

// src/components/TaskTracker.jsx
import { useState } from "react";
import TaskItem from "./TaskItem";

function TaskTracker() {
  const [tasks] = useState([
    { id: 1, text: "Learn React basics", done: true },
    { id: 2, text: "Build Task Tracker project", done: false },
    { id: 3, text: "Add filtering feature", done: false },
  ]);

  return (
    <div className="task-tracker">
      <h2>My Tasks</h2>
      <ul>
        {tasks.map((task) => (
          <TaskItem key={task.id} text={task.text} done={task.done} />
        ))}
      </ul>
    </div>
  );
}

export default TaskTracker;
You should see
Browser မှာ task list သုံးခု list item အနေနဲ့ ပေါ်လာပြီး done: true ဖြစ်တဲ့ task မှာ strikethrough style နဲ့ Done badge ပေါ်လာပါလိမ့်မယ်။

၅ မိနစ် စမ်းကြည့်

task object ထဲမှာ priority field ("high" / "low") ထပ်ထည့်ပြီး TaskItem မှာ priority ကို data-priority attribute အနေနဲ့ ပြပါ - 5 minutes လောက်ပဲ ကြာပါမယ်။

သတိလေးတစ်ချက်

ဒီ part မှာ tasks state ကို static ထားထားပါတယ် - add/delete function တွေကို Part 2 မှာမှ ထည့်မှာဖြစ်လို့ အခုအဆင့်မှာ component structure ကို ကောင်းကောင်းစီစဉ်ထားဖို့ အရေးကြီးပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • map() ထဲမှာ key prop ကို task.id အစား array index ကို သုံးမိတတ်တာ - list reorder ဖြစ်ရင် bug တွေဖြစ်နိုင်ပါတယ်
  • TaskItem ကို props destructure မလုပ်ဘဲ props.text, props.done ဆိုပြီး ထပ်ခါထပ်ခါ ရေးမိတာ

အခု ကိုယ်တိုင် စမ်းကြည့်

task object ထဲမှာ priority field ("high" / "low") ထပ်ထည့်ပြီး TaskItem မှာ priority ကို data-priority attribute အနေနဲ့ ပြပါ - 5 minutes လောက်ပဲ ကြာပါမယ်။

You'll know it worked when: Browser မှာ task list သုံးခု list item အနေနဲ့ ပေါ်လာပြီး done: true ဖြစ်တဲ့ task မှာ strikethrough style နဲ့ Done badge ပေါ်လာပါလိမ့်မယ်။

Project: Task Tracker Setup | Thuta Learning