0Pricing
React Academy · บทเรียน

useOptimistic สำหรับการตอบสนองทันที

แสดงการอัปเดต UI เชิงคาดการณ์ขณะที่ mutation ฝั่งเซิร์ฟเวอร์กำลังดำเนินการด้วย useOptimistic

useOptimistic สำหรับการตอบสนองทันที เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ในบทเรียนนี้ คุณจะใช้ฮุก useOptimistic ของ React 19 เพื่อแสดงการเปลี่ยนแปลงส่วนติดต่อผู้ใช้แบบมองโลกในแง่ดีได้ทันที ขณะที่การเปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์กำลังดำเนินการ และย้อนกลับโดยอัตโนมัติเมื่อเกิดข้อผิดพลาด

ส่วนติดต่อผู้ใช้แบบมองโลกในแง่ดีคืออะไร

ส่วนติดต่อผู้ใช้แบบมองโลกในแง่ดีหมายถึงการสมมติว่าการเปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์จะสำเร็จ แล้วอัปเดตส่วนติดต่อผู้ใช้ทันทีโดยไม่ต้องรอการตอบกลับจากเซิร์ฟเวอร์ หากการดำเนินการล้มเหลว คุณจะย้อนกลับไปยังสถานะก่อนหน้า

พื้นฐานของ useOptimistic

useOptimistic รับสถานะจริงและฟังก์ชันอัปเดต จากนั้นส่งคืนสถานะแบบมองโลกในแง่ดีและฟังก์ชันสำหรับใช้การอัปเดตแบบมองโลกในแง่ดี
'use client';
import { useOptimistic } from 'react';

const [optimisticLikes, addOptimisticLike] = useOptimistic(
  likes,                      // actual state from server
  (state, newLike) => [...state, newLike] // how to apply optimistic update
);

ตัวอย่างปุ่มถูกใจ

เมื่อผู้ใช้คลิกถูกใจ ให้แสดงการถูกใจใหม่ในส่วนติดต่อผู้ใช้ทันทีผ่าน addOptimisticLike จากนั้นจึงส่งคำขอจริง หากคำขอล้มเหลว สถานะแบบมองโลกในแง่ดีจะย้อนกลับไปเป็นสถานะจริงโดยอัตโนมัติ
async function handleLike() {
  addOptimisticLike({ id: Date.now(), user: currentUser });
  await likePost(postId); // server action
}

สถานะแบบมองโลกในแง่ดีอยู่ที่ใด

optimisticLikes จะแสดงค่าแบบมองโลกในแง่ดีระหว่างทรานซิชัน เมื่อเซิร์ฟเวอร์ตอบกลับและสถานะ `likes` จริงได้รับการอัปเดต (ผ่านการตรวจสอบข้อมูลใหม่) useOptimistic จะซิงค์กลับไปยังสถานะจริงโดยอัตโนมัติ

ตัวบ่งชี้รอดำเนินการบนรายการแบบมองโลกในแง่ดี

ทำให้รายการแบบมองโลกในแง่ดีมีลักษณะพิเศษทางภาพ (เช่น ลดความสว่างลงเล็กน้อย) เพื่อให้ผู้ใช้ทราบว่ารายการเหล่านั้นยังรอดำเนินการอยู่ คุณสามารถเพิ่มแฟล็ก `pending: true` ในการอัปเดตแบบมองโลกในแง่ดี แล้วกำหนดรูปแบบให้สอดคล้องกัน
const [optimisticMessages, addOptimistic] = useOptimistic(
  messages,
  (state, msg) => [...state, { ...msg, pending: true }]
);

// Render
{optimisticMessages.map(m => (
  <div key={m.id} style={{ opacity: m.pending ? 0.6 : 1 }}>{m.text}</div>
))}

การใช้ภายในทรานซิชัน

useOptimistic จะทำงานได้เฉพาะภายในทรานซิชันของ React (startTransition หรือ useTransition) เมื่อใช้แอ็กชันฝั่งเซิร์ฟเวอร์ร่วมกับ React 19 การจัดการนี้จะเกิดขึ้นโดยอัตโนมัติ
'use client';
import { startTransition } from 'react';

const handleSubmit = (data) => {
  startTransition(async () => {
    addOptimistic(data);
    await serverAction(data);
  });
};

ตัวอย่างการส่งข้อความแชต

แสดงข้อความที่ส่งแล้วในรายการแชตทันทีขณะที่เซิร์ฟเวอร์กำลังบันทึกข้อความ ข้อความจะแสดงทันทีพร้อมสถานะ 'กำลังส่ง...' จากนั้นจะเปลี่ยนเป็น 'ส่งแล้ว' เมื่อเซิร์ฟเวอร์ยืนยัน

พฤติกรรมการย้อนกลับเมื่อเกิดข้อผิดพลาด

หากแอ็กชันฝั่งเซิร์ฟเวอร์ล้มเหลว (โยนข้อผิดพลาดหรือปฏิเสธคำขอ) useOptimistic จะทิ้งค่าแบบมองโลกในแง่ดีโดยอัตโนมัติ และย้อนกลับไปยังสถานะจริงล่าสุด คุณไม่จำเป็นต้องเขียนการย้อนกลับด้วยตนเอง

useOptimistic เทียบกับการอัปเดตแบบมองโลกในแง่ดีด้วยตนเอง

ก่อนมี useOptimistic คุณต้องจัดการตัวแปรสถานะสองตัว (สถานะจริงและสถานะแบบมองโลกในแง่ดี) และย้อนกลับด้วยตนเองในบล็อก catch ส่วน useOptimistic รวมการทำงานนี้ไว้ในฮุกเดียว พร้อมการย้อนกลับโดยอัตโนมัติ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

จะเกิดอะไรขึ้นกับสถานะแบบมองโลกในแง่ดี หากแอ็กชันฝั่งเซิร์ฟเวอร์ที่ทำให้เกิดสถานะนั้นล้มเหลว

สรุปทบทวน

useOptimistic(actualState, updater) ส่งคืน [optimisticState, addOptimistic] ให้เรียก addOptimistic ก่อนแอ็กชันฝั่งเซิร์ฟเวอร์เพื่อแสดงผลตอบสนองได้ทันที React จะย้อนกลับโดยอัตโนมัติหากแอ็กชันล้มเหลว และทำงานภายในทรานซิชันของ React

จบหลักสูตร

ขอแสดงความยินดี! คุณเรียน **คอมโพเนนต์ฝั่งเซิร์ฟเวอร์และฟีเจอร์ของ React 19** จบแล้ว ขณะนี้คุณเข้าใจ RSC ฮุก use() Actions, useActionState และ useOptimistic สำหรับการพัฒนา React สมัยใหม่แล้ว

คำถามที่พบบ่อย

บทเรียน “useOptimistic สำหรับการตอบสนองทันที” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “useOptimistic สำหรับการตอบสนองทันที” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “useOptimistic สำหรับการตอบสนองทันที”

แสดงการอัปเดต UI เชิงคาดการณ์ขณะที่ mutation ฝั่งเซิร์ฟเวอร์กำลังดำเนินการด้วย useOptimistic คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “useOptimistic สำหรับการตอบสนองทันที” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจ React Server Components
  2. ฮุก use() สำหรับทรัพยากรแบบอะซิงก์
  3. React Actions และ useActionState
  4. useOptimistic สำหรับการตอบสนองทันที
← กลับไปที่ React Academy