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

อะตอมอนุมานและอะตอมแบบอะซิงโครนัส

ประกอบอะตอมอนุมานจากอะตอมอื่น และสร้างอะตอมแบบอะซิงโครนัสที่ทำงานร่วมกับ Suspense

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

อะตอมที่คำนวณจากข้อมูลแบบอ่านอย่างเดียว

สร้างอะตอมที่คำนวณจากข้อมูลโดยส่งฟังก์ชัน getter: const doubleAtom = atom(get => get(countAtom) * 2) อะตอมนี้ไม่มีค่าที่จัดเก็บไว้ แต่จะคำนวณใหม่ทุกครั้งที่ countAtom เปลี่ยนแปลง

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

การติดตามการขึ้นต่อกันโดยอัตโนมัติ

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

หาก getter เรียกใช้ get(atomA) และ get(atomB) อะตอมที่คำนวณจากข้อมูลจะอัปเดตทุกครั้งที่ atomA หรือ atomB เปลี่ยนแปลง

อะตอมที่คำนวณจากข้อมูลและเขียนค่าได้

อะตอมที่คำนวณจากข้อมูลและเขียนค่าได้มีทั้ง getter และ setter: atom(get => get(baseAtom).toUpperCase(), (get, set, newValue) => set(baseAtom, newValue.toLowerCase())) การอ่านจะให้ค่าที่ผ่านการแปลง ส่วนการเขียนจะแปลงค่าแล้วจัดเก็บกลับ

รูปแบบนี้ใช้แปลงข้อมูลแบบสองทิศทางได้โดยไม่เปิดเผยอะตอมพื้นฐานโดยตรง

อะตอมแบบอะซิงโครนัสด้วย Promise

ฟังก์ชัน getter สามารถเป็นแบบอะซิงโครนัสได้: const userAtom = atom(async get => { const id = get(userIdAtom); return await fetchUser(id); }) Jotai รองรับ Promise ที่ส่งคืนจาก getter ของอะตอมโดยตรง

เมื่อ userIdAtom เปลี่ยนแปลง Jotai จะเรียกใช้ getter แบบอะซิงโครนัสอีกครั้งโดยอัตโนมัติ และคอมโพเนนต์ที่ใช้งานจะถูกพักการทำงานระหว่างดึงข้อมูล

อะตอมแบบอะซิงโครนัสและ React Suspense

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

วิธีนี้ตัดความจำเป็นในการจัดการสถานะกำลังโหลดด้วยตนเองในคอมโพเนนต์ ไม่ต้องมีแฟล็ก isLoading และไม่ต้องใช้ useEffect เพื่อดึงข้อมูล

loadable: ไม่ใช้ Suspense

นำเข้า loadable จาก jotai/utils แล้วห่ออะตอมแบบอะซิงโครนัส: const loadableUserAtom = loadable(userAtom) คอมโพเนนต์ที่อ่าน loadableUserAtom จะได้รับ {state: 'loading'}, {state: 'hasData', data: user} หรือ {state: 'hasError', error} โดยไม่ถูกพักการทำงาน

ควรใช้ loadable เมื่อต้องการแสดงสถานะกำลังโหลดแบบกำหนดเองภายในหน้า แทนการพึ่งพาขอบเขต Suspense

การรีเซ็ตอะตอม

ยูทิลิตี atomWithReset จาก jotai/utils สร้างอะตอมที่รีเซ็ตกลับเป็นค่าเริ่มต้นได้โดยใช้สัญลักษณ์ RESET วิธีนี้สะอาดกว่าการติดตามและใส่ค่าเริ่มต้นกลับด้วยตนเอง

ในฟอร์ม ให้รีเซ็ตอะตอมของช่องกรอกข้อมูลทั้งหมดเมื่อส่งหรือยกเลิก โดยเรียก setter ของแต่ละอะตอมด้วย RESET ในตัวจัดการเหตุการณ์เดียว

การเชื่อมโยงอะตอม

อะตอมที่คำนวณจากข้อมูลสามารถอ่านจากอะตอมอื่นหลายตัวได้: const summaryAtom = atom(get => ({ user: get(userAtom), settings: get(settingsAtom), count: get(countAtom) })) วิธีนี้สร้างการอ้างอิงเดียวที่คงที่และอัปเดตเมื่อการขึ้นต่อกันใด ๆ เปลี่ยนแปลง

คอมโพเนนต์ที่ต้องการเพียงข้อมูลสรุปจะสมัครรับข้อมูลจาก summaryAtom แทนการสมัครรับข้อมูลจากอะตอมทั้งสามแยกกัน

อะตอมแบบมีเงื่อนไข

อะตอมที่คำนวณจากข้อมูลสามารถอ่านอะตอมที่แตกต่างกันตามเงื่อนไขได้: const activeDataAtom = atom(get => get(modeAtom) === 'A' ? get(dataAAtom) : get(dataBAtom)) เมื่อ modeAtom เปลี่ยน อะตอมที่คำนวณจากข้อมูลจะเปลี่ยนแหล่งข้อมูลโดยอัตโนมัติ

Jotai จะสมัครรับข้อมูลจากอะตอมที่ถูกต้องใหม่ในการประเมินแต่ละครั้ง เพื่อให้แน่ใจว่าจะไม่มีข้อมูลเก่าจากแขนงที่ไม่ได้ใช้งาน

การจัดการข้อผิดพลาดของอะตอมแบบอะซิงโครนัส

หาก getter ของอะตอมแบบอะซิงโครนัสทำให้เกิดข้อผิดพลาดหรือปฏิเสธ Promise ข้อผิดพลาดจะส่งต่อไปยังขอบเขตดักจับข้อผิดพลาดของ React ที่อยู่ใกล้ที่สุดเมื่อใช้ร่วมกับ Suspense หากใช้ loadable ข้อผิดพลาดจะปรากฏในฟิลด์ state.error เพื่อจัดการภายในหน้า

ในโค้ดสำหรับใช้งานจริง ควรใช้คู่กับอะตอมแบบอะซิงโครนัสเสมอ โดยเลือกใช้ ErrorBoundary หรือ wrapper ของ loadable

ประสิทธิภาพของอะตอมที่คำนวณจากข้อมูล

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

สำหรับการคำนวณที่ใช้ทรัพยากรมาก เช่น การแปลงอาร์เรย์ขนาดใหญ่ การจดจำค่านี้ให้ประโยชน์ด้านประสิทธิภาพอย่างมากโดยไม่ต้องตั้งค่าเพิ่มเติม

การทำงานร่วมกันระหว่างอะตอมแบบอะซิงโครนัสกับ Suspense

จะเกิดอะไรขึ้นกับคอมโพเนนต์ที่อ่านอะตอมแบบอะซิงโครนัสขณะที่ Promise ยังรอดำเนินการ

สรุปบทเรียน

อะตอมที่คำนวณจากข้อมูลจะคำนวณค่าจากอะตอมอื่นโดยใช้ฟังก์ชัน getter พร้อมการติดตามการขึ้นต่อกันโดยอัตโนมัติ อะตอมแบบอะซิงโครนัสใช้ getter แบบอะซิงโครนัสและทำงานร่วมกับ React Suspense โดยค่าเริ่มต้น หากต้องการไม่ใช้ Suspense และจัดการสถานะกำลังโหลดหรือข้อผิดพลาดภายในหน้า ให้ใช้ loadable จาก jotai/utils

อะตอมที่คำนวณจากข้อมูลและเขียนค่าได้ช่วยให้แปลงข้อมูลแบบสองทิศทาง ส่วนอะตอมแบบมีเงื่อนไขจะเปลี่ยนแหล่งข้อมูลแบบไดนามิกตามค่าของอะตอมอื่น

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

บทเรียน “อะตอมอนุมานและอะตอมแบบอะซิงโครนัส” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “อะตอมอนุมานและอะตอมแบบอะซิงโครนัส”

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

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

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

บทเรียน “อะตอมอนุมานและอะตอมแบบอะซิงโครนัส” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อะตอม: หน่วยของสถานะใน Jotai
  2. การอ่านและเขียนอะตอมด้วย useAtom
  3. อะตอมอนุมานและอะตอมแบบอะซิงโครนัส
  4. Jotai เทียบกับ Zustand และ Context: ควรใช้แบบใด
← กลับไปที่ React Academy