ผลต่างระหว่างรุ่นของ "01204223/react-components"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 14: แถว 14:
  
 
== แยก Component ในการแสดงผล ==
 
== แยก Component ในการแสดงผล ==
 +
 +
=== แผนการ ===
 +
 +
ในโค้ด App.jsx ส่วนที่จะถูกตัดออกเป็นจะเป็นส่วนด้านล่างนี้ที่อยู่ใน tag li
 +
 +
<syntaxhighlight>
 +
        {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>
 +
          <!------------------------------------------------------------>
 +
 +
        ))}
 +
</syntaxhighlight>
 +
 +
เมื่อแยกไปแล้ว ส่วนที่เหลือใน App.jsx จะเป็นดังนี้ '''แสดงให้ดูเฉย ๆ ยังไม่ต้องแก้ตาม'''
 +
 +
<syntaxhighlight>
 +
        {todoList.map(todo => (
 +
 +
          <!---------------- โค้ดหลังใช้ component TodoItem ---------------->
 +
          <TodoItem
 +
            key={todo.id}
 +
            todo={todo}
 +
            toggleDone={toggleDone}
 +
            deleteTodo={deleteTodo}
 +
            addNewComment={addNewComment}
 +
          />
 +
          <!------------------------------------------------------------>
 +
 +
        ))}
 +
</syntaxhighlight>
  
 
== ส่ง callback ==
 
== ส่ง callback ==
  
 
== ทางเลือกอื่น ๆ ==
 
== ทางเลือกอื่น ๆ ==

รุ่นแก้ไขเมื่อ 18:30, 11 กุมภาพันธ์ 2569

หน้านี้เป็นส่วนหนึ่งของวิชา 01204223

ใน React app ที่เราเขียนขึ้น เราใส่ทุกอย่างบน UI ลงใน component App เพียงอย่างเดียว ทำให้โค้ดใน App.jsx มีขนาดใหญ่และซับซ้อนมาก &  nbsp; ข้อสังเกตหนึ่งของความซับซ้อนก็คือการจัดการเกี่ยวกับฟอร์ม comment ของแต่ละ TodoItem ที่เราสร้าง state ที่มีความซับซ้อน

เราจะปรับโครงสร้างของ UI ใหม่ จากที่มี component เดียวดังรูปด้านล่าง

223-react-app-component.png

ให้แยกส่วนแสดง TodoItem ออกเป็นอีก component หนึ่ง ดังรูปต่อไปนี้

223-react-app-component-todoitem.png

การออกแบบระบบดังกล่าวทำให้แต่ละ 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}
          />
          <!------------------------------------------------------------>

         ))}

ส่ง callback

ทางเลือกอื่น ๆ