ผลต่างระหว่างรุ่นของ "01204223/react-components"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
| แถว 56: | แถว 56: | ||
))} | ))} | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | {{กล่องเทา| | ||
| + | '''การ refactor''' | ||
| + | การแยกโค้ดออกไปเป็นส่วนใหม่ เป็นวิธีการปรับโค้ดเพื่อทำให้มีโครงสร้าง (หรือสถาปัตยกรรม) ดีขึ้น ดูแลรักษาง่ายขึ้น การปรับนี้ เราไม่ได้มีเป้าหมายในการเปลี่ยนแปลงพฤติกรรมของโค้ดเลย เราทำเพื่อปรับโครงสร้างเท่านั้น การดำเนินการนี้ เราจะเรียกว่า การ [https://refactoring.guru/refactoring refactor โค้ด] (อ่านเพิ่มใน [https://en.wikipedia.org/wiki/Code_refactoring wiki]) | ||
| + | }} | ||
| + | |||
| + | === ตัดโค้ดไปสร้าง TodoItem.jsx === | ||
== ส่ง callback == | == ส่ง callback == | ||
== ทางเลือกอื่น ๆ == | == ทางเลือกอื่น ๆ == | ||
รุ่นแก้ไขเมื่อ 18:34, 11 กุมภาพันธ์ 2569
- หน้านี้เป็นส่วนหนึ่งของวิชา 01204223
ใน React app ที่เราเขียนขึ้น เราใส่ทุกอย่างบน UI ลงใน component App เพียงอย่างเดียว ทำให้โค้ดใน App.jsx มีขนาดใหญ่และซับซ้อนมาก & nbsp; ข้อสังเกตหนึ่งของความซับซ้อนก็คือการจัดการเกี่ยวกับฟอร์ม comment ของแต่ละ TodoItem ที่เราสร้าง state ที่มีความซับซ้อน
เราจะปรับโครงสร้างของ UI ใหม่ จากที่มี component เดียวดังรูปด้านล่าง
ให้แยกส่วนแสดง TodoItem ออกเป็นอีก component หนึ่ง ดังรูปต่อไปนี้
การออกแบบระบบดังกล่าวทำให้แต่ละ component เล็กลง แต่ก็แลกมากับการที่ต้องพิจารณาเรื่องการเก็บ state ของ UI และการเก็บ state ของข้อมูลของแอพทั้งหมด
เนื้อหา
แยก Component ในการแสดงผล
แผนการ
ในโค้ด App.jsx ส่วนที่จะถูกตัดออกเป็นจะเป็นส่วนด้านล่างนี้ที่อยู่ใน tag li
{todoList.map(todo => (
<!----------- จะตัดส่วนนี้ไปสร้างอีก component หนึ่ง ------------------->
<li key={todo.id}>
<span className={todo.done ? "done" : ""}>{todo.title}</span>
<button onClick={() => {toggleDone(todo.id)}}>Toggle</button>
<button onClick={() => {deleteTodo(todo.id)}}>❌</button>
{(todo.comments) && (todo.comments.length > 0) && (
// ละไว้
)}
<div className="new-comment-forms">
// ละไว้
</div>
</li>
<!------------------------------------------------------------>
))}เมื่อแยกไปแล้ว ส่วนที่เหลือใน App.jsx จะเป็นดังนี้ แสดงให้ดูเฉย ๆ ยังไม่ต้องแก้ตาม
{todoList.map(todo => (
<!---------------- โค้ดหลังใช้ component TodoItem ---------------->
<TodoItem
key={todo.id}
todo={todo}
toggleDone={toggleDone}
deleteTodo={deleteTodo}
addNewComment={addNewComment}
/>
<!------------------------------------------------------------>
))}การ refactor การแยกโค้ดออกไปเป็นส่วนใหม่ เป็นวิธีการปรับโค้ดเพื่อทำให้มีโครงสร้าง (หรือสถาปัตยกรรม) ดีขึ้น ดูแลรักษาง่ายขึ้น การปรับนี้ เราไม่ได้มีเป้าหมายในการเปลี่ยนแปลงพฤติกรรมของโค้ดเลย เราทำเพื่อปรับโครงสร้างเท่านั้น การดำเนินการนี้ เราจะเรียกว่า การ refactor โค้ด (อ่านเพิ่มใน wiki)

