محتويات الدورة

React / سلوك تطبيق منسق / الدرس 7

Effects والمزامنة الخارجية

استخدم Effects لربط الحالة الملتزم بها بالأنظمة الخارجية باعتماديات كاملة وتنظيف متناظر.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • هل تحتاج Effect؟
  • تناظر الاشتراك والتنظيف
  • اختبار انتقالات العمر

هل تحتاج Effect؟

تزامن Effect شيئا خارج حساب العرض كاشتراك متصفح أو ودجت أمري. احسب المشتق بالعرض وضع فعل المستخدم بالمعالج؛ فنقل كل حساب يضيف عروضًا والتزامات. صف العلاقة الخارجية قبل Hook: أثناء وجود المكون راقب الحدث بهذه المدخلات. إن لم يوجد نظام خارجي فاشتق مباشرة أو ضع الانتقال بحدث سببه.

الاعتماديات تصف القراءات التفاعلية

تضم القائمة القيم التفاعلية المقروءة ويقارنها Object.is. ليست جدولا تختار به المواعيد؛ فقد يلتقط الحذف قديما وتكرر هوية جديدة الإعداد. أصلح البنية بإنشاء الكائن داخل Effect أو نقل ثابت للخارج، ولا تسكت الفاحص لفرض التوقيت. ينظف القديم بقيمه قبل البديل وعند الفك.

تناظر الاشتراك والتنظيف

يراقب المثال حدثي الاتصال ويسجل دالتين ويزيلهما نفسيهما. يقرأ navigator تهيئة كسولة لمضيف عميل؛ ويحتاج الخادم بداية حتمية صريحة. لا يرسل طلبا. تفحص Strict Mode دورة إضافية فليصح إعادة الاتصال. اختبر أحداثا مصطنعة بدلا من انقطاع حقيقي أو تأخير اعتباطي.

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useEffect, useState } from "react";
export default function App() { const [online, setOnline] = useState(() => navigator.onLine); useEffect(() => { const yes = () => setOnline(true); const no = () => setOnline(false); window.addEventListener("online", yes); window.addEventListener("offline", no); return () => { window.removeEventListener("online", yes); window.removeEventListener("offline", no); }; }, []); return <main><h1>Browser status</h1><p>{online ? "Online" : "Offline"}</p></main>; }
الناتج المتوقع
After synthetic offline: Offline. After synthetic online: Online.

تملك Effect المستمعين لا طلب شبكة وتختبر الأحداث المصطنعة الحالة والعمر.

تحديث عرض خارجي بعد الالتزام

يزامن المثال document.title بالعداد ويعيد السابق عند تنظيف الإعداد. تعكس count القراءة ويحفظ التنظيف عنوانه. يناسب مالكا معزولا، ويحتاج التطبيق تنسيق ملكية العناوين. لا تنفذ Effects في عرض الخادم ولا تضمن دائما «بعد الرسم» لكل تفاعل، فلا تعتمد توقيتا غير موعود.

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useEffect, useState } from "react";
export default function App() { const [count, setCount] = useState(0); useEffect(() => { const previous = document.title; document.title = `Count ${count}`; return () => { document.title = previous; }; }, [count]); return <main><h1>Title owner</h1><button type="button" onClick={() => setCount(c => c + 1)}>Increment</button><p>{count}</p></main>; }
الناتج المتوقع
Initial document title: Count 0. After Increment: Count 1.

تصبح كل قيمة ملتزم بها عنوانا لدى مالك معزول ويعيد التنظيف ما استبدله.

اختبار انتقالات العمر

اختبر التركيب والتغير والفك ودورة التطوير. قد يكرر مستمع بلا تنظيف العمل لاحقا. يحتاج العمل غير المتزامن حماية قدم أو إلغاء؛ لا يلغي التنظيف الآثار المنجزة. افصل علاقات المزامنة، وتتبع دورة Effect تحدث حالة تغير اعتمادها؛ فقد يكون الحل حذف المشتق المكرر لا memo أو كبت الإعادة.

الأخطاء الشائعة وإصلاحها

تقرأ Effect خاصية قديمة

لماذا يحدث؟
أغفلت قراءة تفاعلية.
كيف تصلحه؟
أكمل الاعتماديات وأصلح البنية.
كيف تتجنب تكراره؟
أبق الفاحص مفعلا.

تتكرر المستمعات بعد التركيب

لماذا يحدث؟
لا يقابل الإعداد تنظيف.
كيف تصلحه؟
أزل الدالة المسجلة نفسها.
كيف تتجنب تكراره؟
اختبر دورة الإعادة.

يسبب المجموع المشتق حلقات

لماذا يحدث؟
تصون Effect حالة مكررة.
كيف تصلحه؟
احسبه بالعرض.
كيف تتجنب تكراره؟
حدد النظام الخارجي لكل Effect.

اختبر فهمك

1. هل تتطلب تصفية مصفوفة محلية Effect؟

اعرض الحل المشروح

لا عادة؛ احسبها من القائمة والاستعلام أثناء العرض. تضيف Effect حالة مشتقة وعرضا قديما دون نظام خارجي. قس قبل memo لتصفية مكلفة.

2. لماذا تفيد دورة Effect الإضافية للاشتراك؟

اعرض الحل المشروح

تكشف تنظيفا لا يعكس الاشتراك. يعيد الصحيح الاتصال دون تكرار؛ أصلح العقد ولا تخف الفحص بمرجع يمنع إعدادا ضروريا بعد تركيب حقيقي.

أهم ما تعلمته

  • تزامن Effects الأنظمة الخارجية.
  • تصف الاعتماديات القراءات لا الرغبات.
  • يجب أن يعكس التنظيف الإعداد.

المراجع الرسمية