مقدمة للدالة useEffect() في React
تستخدم هذه الدالة لتنفيذ أوامر معينة بعد أن يتم عرض المكوّن في واجهة المستخدم و بعد تحديث قيمة تابعة له.
عادةً ما يتم استخدامها عند الحاجة لجلب معلومات ضرورية للمكوّن. مثلاً عند جلب بيانات من السيرفر من أجل عرضها فيه، عند الحاجة لتشغيل مؤقت ( Timers ) بعد أن يتم عرضه، إذا كان هناك حاجة لإضافة أحداث ( Events ) لعناصر واجهة المستخدم و إزالتها عند إخفائه إلخ..
هذه الدالة هي من ضمن دوال الهووكس ( Hooks ) التي يمكن استخدامها في المكوّن المبني بأسلوب Function Component.
طريقة تضمينها
حتى تتمكن من استخدام الدالة useEffect() يجب تضمينها أولاً كما يلي.
مثال
import { useEffect } from "react";
الشكل العام لاستخدامها
عند استخدام هذه الدالة فإنه يتم ربطها بالشيء الذي سيتم مراقبة قيمته و بالدالة التي من خلالها سيتم تحديث قيمته.
مثال
useEffect(setup, dependency?);setup_ عبارة عن دالة سيتم تنفيذه كلما حصل تغيير ما.dependency_ هو باراميتر إختياري مكانه يمكن تمرير مصفوفة بأسماء المتغيرات المراد إعادة تنفيذ الدالة إذا تغييرت قيمها.
الدالة التي توضع مكان الباراميتر setup يتم تنفيذها بشكل تلقائي عندما يتم عرض محتوى المكوّن لأول مرة و في كل مرة يحصل تغيير في أي قيمة مرتبطة بالمكوّن طالما أنه لم يتم تمرير مصفوفة مكان الباراميتر dependency.
في حال تم تمرير مصفوفة مكان الباراميتر dependency فإنه سيتم تنفيذ الدالة عند عرض محتوى المكوّن لأول مرة فقط و في كل مرة يحصل تغيير في قيمة أحد المتغيرات المذكور إسمها في المصفوفة.
عند كتابة كود الدالة التي توضع مكان الباراميتر setup ستجدنا في آخرها نفعل return بهدف إيقاف عمل أي كود لا يزال يعمل فيها في حال تم إزالة المكوّن من واجهة المستخدم مما يحسّن الأداء و يضمن أن لا يتم تكرار تنفيذ الأوامر بشكل خاطئ.
كم مرة سيتم تنفيذ أوامرها
إذا تم استخدام الدالة useEffect() بدون تمرير مصفوفة مكان الباراميتر الإفتراضي فهذا يعني أنه سيتم تنفيذ الدالة التي نمررها لها كلما تم رصد شيء تغيّر.
الحالة الأولى
useEffect(() => { // سيتم تنفيذ الأوامر الموضوعة هنا إذا تم رصد أي تغيير });
إذا تم استخدام الدالة useEffect() مع تمرير مصفوفة فارغة مكان الباراميتر الإفتراضي فهذا يعني أنه سيتم تنفيذ الدالة التي نمررها لها مرة واحدة فقط.
الحالة الثانية
useEffect(() => { // سيتم تنفيذ الأوامر الموضوعة هنا عند عرض المكوّن أول مرة فقط }, []);
إذا تم استخدام الدالة useEffect() مع تمرير مصفوفة مكان الباراميتر الإفتراضي فيها أسماء متغيرات فهذا يعني أنه سيتم تنفيذ الدالة عند عرض المكوّن لأول مرة و عند حصول أي تغيير في قيمة أحد المتغيرات.
الحالة الثالثة
useEffect(() => { // سيتم تنفيذ الأوامر الموضوعة هنا عند عرض المكوّن أول مرة // variables و عند حصول أي تغيير في قيمة متغير تم تمريره في المصفوفة }, [variables]);