"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > React's useEffect Hook مبسط: إدارة الآثار الجانبية مثل المحترفين

React's useEffect Hook مبسط: إدارة الآثار الجانبية مثل المحترفين

تم النشر بتاريخ 2024-11-07
تصفح:646

React

فهم تأثير الاستخدام في رد الفعل: من الصفر إلى البطل

أصبحت React إحدى مكتبات JavaScript الأكثر شيوعًا لبناء واجهات المستخدم الديناميكية. إحدى أهم أدوات الارتباط في React هي useEffect، والتي تسمح للمطورين بإدارة التأثيرات الجانبية في المكونات الوظيفية. تتضمن التأثيرات الجانبية عمليات مثل جلب البيانات، أو إعداد الاشتراكات، أو معالجة DOM يدويًا. في هذه المدونة، سوف نتعمق في ماهية useEffect، وكيف يعمل، ونقدم أمثلة خطوة بخطوة لفهم أفضل.

ما هو تأثير الاستخدام؟

في React، useEffect عبارة عن خطاف مدمج يسمح لك بتنفيذ تأثيرات جانبية في مكونات الوظيفة. الآثار الجانبية، كما يوحي الاسم، هي عمليات تؤثر على شيء خارج الوظيفة، مثل استدعاءات واجهة برمجة التطبيقات (API)، أو الموقتات، أو التسجيل، أو تحديث DOM.

قبل تقديم الخطافات في React 16.8، كان عليك استخدام مكونات الفئة وطرق دورة الحياة مثل ComponentDidMount وcomponentDidUpdate وcomponentWillUnmount للتعامل مع الآثار الجانبية. الآن، مع useEffect، تم دمج أحداث دورة الحياة هذه في وظيفة واحدة للمكونات الوظيفية.

لماذا تختار useEffect؟

يعد useEffect أداة ربط قوية لإدارة التأثيرات الجانبية في React لعدة أسباب:

  1. تبسيط التعليمات البرمجية: فهو يلغي الحاجة إلى المكونات القائمة على الفئة وطرق دورة الحياة، مما يسمح لك بكتابة تعليمات برمجية أكثر وضوحًا ووظيفية.
  2. الآثار الجانبية المركزية: يمكنك إدارة جميع الآثار الجانبية، مثل جلب البيانات أو تحديث DOM، في مكان واحد.
  3. تحسين إمكانية القراءة: يعمل على تبسيط كيفية إدارة أحداث دورة الحياة، مما يجعل التعليمات البرمجية أكثر قابلية للقراءة وأقل تعقيدًا.
  4. المرونة: مع useEffect، لديك المزيد من التحكم في متى وكم مرة يتم تنفيذ التأثيرات الجانبية، حيث يمكنك تحديد التبعيات التي تحدد متى يجب تشغيل التأثير.

كيف يعمل؟

يقبل خطاف useEffect وسيطتين:

  1. وظيفة التأثير: تحتوي هذه الوظيفة على منطق التأثير الجانبي، مثل جلب البيانات أو إعداد الاشتراك.
  2. مصفوفة التبعية (اختياري): مصفوفة من القيم التي تحدد متى يجب إعادة تشغيل التأثير. إذا تغيرت أي قيمة في مصفوفة التبعية، فسيتم تنفيذ التأثير مرة أخرى. إذا قمت بحذف هذه المصفوفة، فسيتم تشغيل التأثير بعد كل عرض.

إليك البنية الأساسية:

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

من خلال التحكم في وقت تشغيل 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
; }

إليك ما يحدث:

  1. تقوم الدالة setInterval بإعداد مؤقت يزيد الوقت كل ثانية.
  2. تقوم وظيفة التنظيف (التي يتم إرجاعها بواسطة useEffect) بمسح الفاصل الزمني عند إلغاء تحميل المكون. وهذا يضمن عدم استمرار تشغيل المؤقت بعد إزالة المكون.

أمثلة على سيناريوهات تأثير الاستخدام

دعونا نستكشف بعض السيناريوهات الشائعة حيث يكون 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. من خلال التحكم في وقت ظهور التأثيرات الجانبية والتنظيف عند الضرورة، يمكنك تحسين مكوناتك وتجنب عمليات إعادة العرض غير الضرورية أو تسرب الذاكرة. قم بتجربة الأمثلة المذكورة أعلاه لإتقان فن إدارة الآثار الجانبية!

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/chintanonweb/reacts-useeffect-hook-simplified-manage-side-effects-like-a-pro-2clj؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3