أصبحت React إحدى مكتبات JavaScript الأكثر شيوعًا لبناء واجهات المستخدم الديناميكية. إحدى أهم أدوات الارتباط في React هي useEffect، والتي تسمح للمطورين بإدارة التأثيرات الجانبية في المكونات الوظيفية. تتضمن التأثيرات الجانبية عمليات مثل جلب البيانات، أو إعداد الاشتراكات، أو معالجة DOM يدويًا. في هذه المدونة، سوف نتعمق في ماهية useEffect، وكيف يعمل، ونقدم أمثلة خطوة بخطوة لفهم أفضل.
في React، useEffect عبارة عن خطاف مدمج يسمح لك بتنفيذ تأثيرات جانبية في مكونات الوظيفة. الآثار الجانبية، كما يوحي الاسم، هي عمليات تؤثر على شيء خارج الوظيفة، مثل استدعاءات واجهة برمجة التطبيقات (API)، أو الموقتات، أو التسجيل، أو تحديث DOM.
قبل تقديم الخطافات في React 16.8، كان عليك استخدام مكونات الفئة وطرق دورة الحياة مثل ComponentDidMount وcomponentDidUpdate وcomponentWillUnmount للتعامل مع الآثار الجانبية. الآن، مع useEffect، تم دمج أحداث دورة الحياة هذه في وظيفة واحدة للمكونات الوظيفية.
يعد useEffect أداة ربط قوية لإدارة التأثيرات الجانبية في React لعدة أسباب:
يقبل خطاف useEffect وسيطتين:
إليك البنية الأساسية:
useEffect(() => { // Side effect logic goes here return () => { // Optional cleanup function }; }, [/* Dependencies go here */]);
import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [data, setData] = useState(null); useEffect(() => { // Fetching data when the component mounts fetch('https://jsonplaceholder.typicode.com/posts/1') .then((response) => response.json()) .then((json) => setData(json)); // Optional cleanup (in this case, not needed) return () => { // Cleanup logic if necessary }; }, []); // Empty array means this effect will only run once when the component mounts return{data ? data.title : 'Loading...'}; }
في هذا المثال، يتم جلب البيانات من واجهة برمجة التطبيقات (API) عند عرض المكون لأول مرة، ويتم عرض النتيجة في واجهة المستخدم. نظرًا لأننا نمرر مصفوفة تبعية فارغة، فإن هذا التأثير يعمل مرة واحدة فقط بعد العرض الأول.
من خلال التحكم في وقت تشغيل useEffect، يمكننا تحسين الأداء والتأكد من حدوث الآثار الجانبية في الوقت الصحيح.
ليست كل التأثيرات تتطلب التنظيف. يكون التنظيف ضروريًا فقط عندما تحتاج إلى إزالة شيء ما أو إعادة تعيينه بعد تنفيذ التأثير، مثل مسح المؤقتات أو إلغاء الاشتراك في تدفقات البيانات.
على سبيل المثال، إليك السيناريو الذي لا يلزم فيه أي تنظيف:
import React, { useState, useEffect } from 'react'; function NoCleanupEffect() { const [count, setCount] = useState(0); useEffect(() => { console.log('Effect without cleanup runs every time the count changes'); }, [count]); // Runs every time `count` changes return (); }{count}
في هذه الحالة، يتم تشغيل التأثير في كل مرة تتغير فيها حالة العد. نظرًا لأننا لا نقوم بإعداد الاشتراكات أو إدارة الموارد الخارجية، فليس هناك حاجة إلى إجراء تنظيف.
إذا كان التأثير الخاص بك يتضمن إعداد اشتراكات أو مؤقتات، فمن المحتمل أن تحتاج إلى التنظيف بعد التأثير. على سبيل المثال، تخيل سيناريو حيث نريد إعداد مؤقت:
import React, { useState, useEffect } from 'react'; function TimerComponent() { const [time, setTime] = useState(0); useEffect(() => { const interval = setInterval(() => { setTime((prevTime) => prevTime 1); }, 1000); // Cleanup function to clear the timer return () => { clearInterval(interval); }; }, []); // Empty dependency array: effect runs once, and cleanup occurs when the component unmounts return{time} seconds have passed; }
إليك ما يحدث:
دعونا نستكشف بعض السيناريوهات الشائعة حيث يكون useEffect مفيدًا بشكل خاص.
يعد جلب البيانات عند تركيب المكون إحدى حالات الاستخدام الأكثر شيوعًا لـ useEffect.
useEffect(() => { fetchData(); async function fetchData() { const response = await fetch('https://api.example.com/data'); const result = await response.json(); setData(result); } }, []); // Empty dependency array means it runs once when the component mounts
يمكنك استخدام useEffect لمعالجة DOM يدويًا بعد التصيير، على الرغم من أنه ينبغي القيام بذلك بشكل مقتصد نظرًا لأن React تدير DOM بكفاءة.
useEffect(() => { document.title = `You clicked ${count} times`; }, [count]); // Updates the document title whenever `count` changes
إذا كانت لديك موارد مثل الاشتراكات أو مستمعي الأحداث التي تحتاج إلى التنظيف، فيمكنك استخدام وظيفة الإرجاع في useEffect للتعامل مع هذا.
useEffect(() => { window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); // Cleanup listener when the component unmounts
1. ماذا يحدث إذا قمت بحذف مصفوفة التبعية في useEffect؟
إذا قمت بحذف مصفوفة التبعية، فسيتم تشغيل useEffect بعد كل عرض، مما قد يسبب مشكلات في الأداء بسبب تأثيرات جانبية باهظة الثمن مثل استدعاءات واجهة برمجة التطبيقات (API).
2. هل يمكنني تشغيل useEffect مرة واحدة فقط؟
نعم، تمرير مصفوفة تبعية فارغة [] يضمن تشغيل التأثير مرة واحدة فقط بعد تحميل المكون.
3. ما هي وظيفة التنظيف المستخدمة في useEffect؟
وظيفة التنظيف هي وسيلة للتراجع عن التأثير عند إلغاء تحميل المكون أو قبل تشغيل التأثير مرة أخرى. إنه مفيد لتنظيف المؤقتات أو مستمعي الأحداث أو الاشتراكات.
في الختام، useEffect هو خطاف قوي ومرن يبسط إدارة الآثار الجانبية في React. من خلال التحكم في وقت ظهور التأثيرات الجانبية والتنظيف عند الضرورة، يمكنك تحسين مكوناتك وتجنب عمليات إعادة العرض غير الضرورية أو تسرب الذاكرة. قم بتجربة الأمثلة المذكورة أعلاه لإتقان فن إدارة الآثار الجانبية!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3