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

การอ่านและเขียนอะตอมด้วย useAtom

ใช้ useAtom, useAtomValue และ useSetAtom เพื่ออ่านและอัปเดตอะตอมทั่วทั้งทรีคอมโพเนนต์

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

useAtom: Hook หลัก

useAtom(someAtom) ส่งคืน [value, setter] ซึ่งมีรูปแบบสอดคล้องกับ API ของ useState โดย value คือสถานะปัจจุบันของอะตอม ส่วน setter ใช้ปรับปรุงสถานะ ควรใช้สิ่งนี้เมื่อคอมโพเนนต์ทั้งอ่านและเขียนค่าอะตอม

setter รับได้ทั้งค่าใหม่หรือฟังก์ชันอัปเดต: setCount(c => c + 1)

useAtomValue: การเข้าถึงแบบอ่านอย่างเดียว

useAtomValue(someAtom) ส่งคืนเฉพาะค่าปัจจุบัน โดยไม่มี setter ควรใช้ในคอมโพเนนต์ที่มีหน้าที่แสดงผลอย่างเดียว ซึ่งอ่านสถานะแต่ไม่เคยแก้ไขสถานะ

เนื่องจากคอมโพเนนต์ไม่มีการอ้างอิง setter เจตนาของโค้ดจึงสื่อไว้อย่างชัดเจนว่า คอมโพเนนต์นี้มีหน้าที่อ่านข้อมูลเพียงอย่างเดียว

useSetAtom: การเข้าถึงแบบเขียนอย่างเดียว

useSetAtom(someAtom) ส่งคืนเฉพาะฟังก์ชัน setter ที่สำคัญคือ มันจะไม่ทำให้คอมโพเนนต์สมัครรับค่าของอะตอม คอมโพเนนต์จึงไม่เรนเดอร์ใหม่เมื่ออะตอมเปลี่ยนแปลง

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

เหตุผลที่ useSetAtom สำคัญต่อประสิทธิภาพ

คอมโพเนนต์ที่เรียกใช้ useSetAtom(countAtom) เพื่อเพิ่มตัวนับจะไม่เรนเดอร์ใหม่เมื่อ countAtom เปลี่ยนแปลง เพราะคอมโพเนนต์นั้นไม่ได้สมัครรับค่า มีเพียงคอมโพเนนต์ที่แสดงค่าตัวนับเท่านั้นที่เรนเดอร์ใหม่

นี่เป็นการปรับให้เหมาะสมที่เรียบง่ายแต่ทรงพลัง โดยแยกผู้เขียนข้อมูลออกจากผู้อ่านข้อมูลเพื่อป้องกันการเรนเดอร์ใหม่ที่ต่อเนื่องกันเป็นลูกโซ่

atomWithStorage สำหรับการคงอยู่ของข้อมูล

นำเข้า atomWithStorage จาก jotai/utils ใช้งานเหมือน atom() ได้ทุกประการ แต่ส่งคีย์ของพื้นที่จัดเก็บเป็นอาร์กิวเมนต์แรก: atomWithStorage('theme', 'light') อะตอมจะซิงค์กับ localStorage โดยอัตโนมัติ

เมื่อโหลดหน้าเว็บใหม่ อะตอมจะกู้ค่าจาก localStorage คอมโพเนนต์ทั้งหมดที่อ่านอะตอมนี้จะได้รับค่าที่บันทึกไว้ทันที

การรีเซ็ต atomWithStorage

สามารถส่งสัญลักษณ์ RESET จาก jotai/utils ให้ setter ของอะตอมที่สร้างด้วย atomWithStorage ได้: setter(RESET) การทำเช่นนี้จะลบรายการใน localStorage และรีเซ็ตอะตอมกลับเป็นค่าเริ่มต้น

วิธีนี้มีประโยชน์สำหรับขั้นตอนการออกจากระบบหรือปุ่ม "รีเซ็ตเป็นค่าเริ่มต้น" ในหน้าการตั้งค่า

กลุ่มอะตอมด้วย atomFamily

atomFamily จาก jotai/utils สร้างโรงงานที่ส่งคืนอะตอมซึ่งมีพารามิเตอร์ ตัวอย่างเช่น atomFamily(id => atom(null)) จะสร้างอะตอมแยกกันสำหรับ id ที่ส่งเข้ามาแต่ละค่าซึ่งไม่ซ้ำกัน

วิธีนี้เหมาะอย่างยิ่งสำหรับสถานะแยกตามรายการ เช่น selectedAtom(itemId) หรือ expandedAtom(rowId) โดยไม่ต้องจัดการอะตอมแผนที่ขนาดใหญ่เพียงตัวเดียว

การล้างข้อมูลกลุ่มอะตอม

กลุ่มอะตอมอาจขยายตัวโดยไม่มีขอบเขตหากมีการสะสม ID ควรใช้ atomFamily.setShouldRemove((createdAt, param) => ...) เพื่อกำหนดเพรดิเคตสำหรับการล้างข้อมูล ซึ่ง Jotai จะเรียกใช้เมื่อตัดสินใจนำสมาชิกกลุ่มที่เก่าออก

สำหรับรายการที่มีการเพิ่มและลบรายการ ควรล้างรายการของกลุ่มอะตอมทุกครั้งที่ลบรายการ เพื่อป้องกันหน่วยความจำรั่ว

Jotai DevTools

แพ็กเกจ jotai-devtools มีแผงภาพที่แสดงรายการอะตอมที่ทำงานอยู่ทั้งหมดพร้อมค่าปัจจุบัน ติดตั้งแพ็กเกจนี้ ห่อแอปด้วย DevTools แล้วตรวจสอบสถานะของอะตอมได้แบบเรียลไทม์

การอัปเดตอะตอมแต่ละครั้งจะถูกบันทึกล็อกพร้อมค่าก่อนหน้าและค่าถัดไป ทำให้การแก้ไขปัญหาการทำงานร่วมกันของอะตอมที่ซับซ้อนทำได้ตรงไปตรงมา

ตัวอย่างการเรนเดอร์ใหม่แบบเลือกเฉพาะส่วน

ในรายการขนาดใหญ่ คอมโพเนนต์ ListContainer สามารถใช้ useSetAtom(selectedIdAtom) เพื่ออัปเดตการเลือกโดยไม่สมัครรับข้อมูลจาก selectedIdAtom มีเพียงคอมโพเนนต์ ListItem แต่ละรายการที่เรียกใช้ useAtomValue(selectedIdAtom) เท่านั้นที่จะเรนเดอร์ใหม่เมื่อการเลือกเปลี่ยนแปลง

รูปแบบนี้รองรับการขยายได้ดี การเพิ่มรายการหลายพันรายการไม่ทำให้การอัปเดตการเลือกช้าลง

การใช้ Hook ทั้งสามร่วมกัน

เลือก Hook ให้ตรงกับความต้องการของคอมโพเนนต์: ใช้ useAtomValue สำหรับการแสดงผลอย่างเดียว ใช้ useSetAtom สำหรับการดำเนินการอย่างเดียว และใช้ useAtom เมื่อต้องการทั้งสองอย่าง การออกแบบ API อย่างมีเจตนานี้ทำให้เห็นความรับผิดชอบของคอมโพเนนต์ได้อย่างชัดเจนในทันที

โดยทั่วไปคอมโพเนนต์ช่องกรอกข้อมูลในฟอร์มจะใช้ useAtom ปุ่มส่งข้อมูลจะใช้ useSetAtom และป้ายกำกับที่แสดงตัวนับจะใช้ useAtomValue

useSetAtom เทียบกับ useAtom

ข้อได้เปรียบสำคัญของการใช้ useSetAtom แทน useAtom คืออะไร

สรุปบทเรียน

useAtom ให้ทั้งค่าและ setter, useAtomValue ให้เฉพาะค่า (การสมัครรับข้อมูลเพื่ออ่าน), ส่วน useSetAtom ให้เฉพาะ setter (ไม่เรนเดอร์ใหม่เมื่อค่าเปลี่ยนแปลง) atomWithStorage จะบันทึกข้อมูลไว้ใน localStorage และรองรับ RESET ส่วน atomFamily จะสร้างอะตอมแยกตามพารามิเตอร์สำหรับรายการแบบไดนามิก

การเลือก Hook ที่เหมาะสมช่วยลดการเรนเดอร์ใหม่ที่ไม่จำเป็นและทำให้เจตนาของคอมโพเนนต์ชัดเจน

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

บทเรียน “การอ่านและเขียนอะตอมด้วย useAtom” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านและเขียนอะตอมด้วย useAtom”

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

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

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

บทเรียน “การอ่านและเขียนอะตอมด้วย useAtom” ใช้เวลานานแค่ไหน

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

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

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

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

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