قراءة Atoms وكتابتها باستخدام useAtom
استخدم useAtom وuseAtomValue وuseSetAtom لقراءة atoms وتحديثها عبر شجرة المكوّنات
قراءة Atoms وكتابتها باستخدام useAtom درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
useAtom: الخطاف الأساسي
يعيد useAtom(someAtom) القيمة ودالة التعيين معًا بالشكل [value, setter]، محاكيًا واجهة برمجة التطبيقات الخاصة بـ 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)، من دون إدارة ذرة واحدة كبيرة على شكل خريطة.
تنظيف عائلة الذرات
قد تنمو عائلات الذرات بلا حدود إذا تراكمت المعرّفات. استخدموا atomFamily.setShouldRemove((createdAt, param) => ...) لتعريف شرط تنظيف تستدعيه Jotai عند تحديد أعضاء العائلة القديمة التي ينبغي طردها.
في القوائم التي تُضاف إليها العناصر وتُحذف منها، احرصوا دائمًا على تنظيف إدخالات عائلة الذرات عند حذف العناصر لتجنب تسرّبات الذاكرة.
أدوات تطوير Jotai
توفر الحزمة jotai-devtools لوحة مرئية تعرض جميع الذرات النشطة وقيمها الحالية. ثبّتوها، وغلّفوا تطبيقكم بـ DevTools، وافحصوا حالة الذرات في الوقت الفعلي.
يُسجَّل كل تحديث للذرة مع القيمة السابقة والتالية، مما يجعل تصحيح تفاعلات الذرات المعقدة مباشرًا.
مثال على إعادة التصيير الانتقائية
في قائمة كبيرة، يمكن لمكوّن ListContainer استخدام useSetAtom(selectedIdAtom) لتحديث التحديد من دون الاشتراك في selectedIdAtom. لا تُعاد تصيير سوى مكوّنات ListItem الفردية التي تستدعي useAtomValue(selectedIdAtom) عند تغيّر التحديد.
يتوسع هذا النمط جيدًا: فإضافة آلاف عناصر القائمة لا تؤدي إلى إبطاء تحديثات التحديد.
دمج الخطافات الثلاثة
اختاروا الخطاف الذي يطابق حاجة المكوّن: استخدموا useAtomValue للعرض الخالص، وuseSetAtom للإجراءات الخالصة، وuseAtom عندما تحتاجون إلى كليهما. يجعل تصميم واجهة برمجة التطبيقات المقصود هذا مسؤولية المكوّن واضحة من النظرة الأولى.
يستخدم مكوّن حقل النموذج عادةً useAtom، ويستخدم زر الإرسال useSetAtom، بينما تستخدم التسمية التي تعرض عددًا useAtomValue.
useSetAtom في مقابل useAtom
ما الميزة الأساسية لاستخدام useSetAtom بدلًا من useAtom؟
مراجعة الدرس
يوفر useAtom القيمة وsetter معًا؛ ويوفر useAtomValue القيمة فقط، أي اشتراكات القراءة؛ بينما يوفر useSetAtom setter فقط، ولا يؤدي تغيّر القيمة إلى إعادة التصيير. يحفظ atomWithStorage الحالة في localStorage مع دعم RESET، وتنشئ atomFamily ذرات مرتبطة بكل معامل للقوائم الديناميكية.
يؤدي اختيار الخطاف المناسب إلى تقليل عمليات إعادة التصيير غير الضرورية وتوضيح مقصد المكوّن.
الأسئلة الشائعة
هل درس «قراءة Atoms وكتابتها باستخدام useAtom» مجاني؟
نعم — نص درس «قراءة Atoms وكتابتها باستخدام useAtom» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «قراءة Atoms وكتابتها باستخدام useAtom»؟
استخدم useAtom وuseAtomValue وuseSetAtom لقراءة atoms وتحديثها عبر شجرة المكوّنات تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «قراءة Atoms وكتابتها باستخدام useAtom»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Atoms: وحدة الحالة في Jotai
- قراءة Atoms وكتابتها باستخدام useAtom
- الـ Atoms المشتقة والـ Atoms غير المتزامنة
- Jotai أم Zustand أم Context: متى تستخدم كلًا منها