10 أمثلة بسيطة لاستخدام useEffect في مواقع الويب.

 سأقدم لك 10 أمثلة بسيطة لاستخدام useEffect في مواقع الويب. ستكون الأمثلة متنوعة لتغطية مجموعة واسعة من الحالات، 

1. تحديث عنوان الصفحة:

import React, { useEffect } from 'react';

const UpdateTitle = () => {
    useEffect(() => {
        document.title = 'عنوان جديد';
    }, []); // [] يجعل useEffect يعمل مرة واحدة عند تصيير المكون

    return <div>تحقق من عنوان الصفحة</div>;
};

export default UpdateTitle;


2. جلب بيانات من API:

import React, { useState, useEffect } from 'react';

const FetchData = () => {
    const [data, setData] = useState(null);

    useEffect(() => {
        fetch('https://api.example.com/data')
            .then(response => response.json())
            .then(data => setData(data));
    }, []); // جلب البيانات مرة واحدة فقط

    return <div>{data ? JSON.stringify(data) : 'جارٍ التحميل...'}</div>;
};

export default FetchData;


3. إعداد مؤقت :

import React, { useState, useEffect } from 'react';

const Timer = () => {
    const [count, setCount] = useState(0);

    useEffect(() => {
        const timer = setInterval(() => {
            setCount(prevCount => prevCount + 1);
        }, 1000);

        return () => clearInterval(timer); // تنظيف المؤقت عند فك التصيير
    }, []);

    return <div>Count: {count}</div>;
};

export default Timer;


4. الكشف عن أحداث التمرير:

import React, { useState, useEffect } from 'react';

const ScrollDetection = () => {
    const [scrollY, setScrollY] = useState(0);

    const handleScroll = () => {
        setScrollY(window.scrollY);
    };

    useEffect(() => {
        window.addEventListener('scroll', handleScroll);
        return () => window.removeEventListener('scroll', handleScroll); // تنظيف المستمع عند فك التصيير
    }, []);

    return <div>Scroll Position: {scrollY}px</div>;
};

export default ScrollDetection;


5. متابعة حجم نافذة المتصفح:

import React, { useState, useEffect } from 'react';

const WindowSize = () => {
    const [windowSize, setWindowSize] = useState({
        width: window.innerWidth,
        height: window.innerHeight
    });

    const handleResize = () => {
        setWindowSize({
            width: window.innerWidth,
            height: window.innerHeight
        });
    };

    useEffect(() => {
        window.addEventListener('resize', handleResize);
        return () => window.removeEventListener('resize', handleResize); // تنظيف المستمع عند فك التصيير
    }, []);

    return (
        <div>
            Width: {windowSize.width}px, Height: {windowSize.height}px
        </div>
    );
};

export default WindowSize;


6. تتبع مؤشر الفأرة:

import React, { useState, useEffect } from 'react';

const MousePosition = () => {
    const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });

    const handleMouseMove = (event) => {
        setMousePosition({
            x: event.clientX,
            y: event.clientY
        });
    };

    useEffect(() => {
        window.addEventListener('mousemove', handleMouseMove);
        return () => window.removeEventListener('mousemove', handleMouseMove); // تنظيف المستمع عند فك التصيير
    }, []);

    return (
        <div>
            Mouse Position: ({mousePosition.x}, {mousePosition.y})
        </div>
    );
};

export default MousePosition;


7. تنفيذ دالة عند تغيير الحالة:

import React, { useState, useEffect } from 'react';

const StateChange = () => {
    const [count, setCount] = useState(0);

    useEffect(() => {
        console.log(`Count has changed to ${count}`);
    }, [count]); // تنفيذه فقط عندما يتغير count

    return (
        <div>
            <button onClick={() => setCount(count + 1)}>Increase Count</button>
            <div>Count: {count}</div>
        </div>
    );
};

export default StateChange;


8. جلب بيانات عند تغيير المدخل:

import React, { useState, useEffect } from 'react';

const DataFetchWithInput = () => {
    const [query, setQuery] = useState('react');
    const [data, setData] = useState(null);

    useEffect(() => {
        fetch(`https://api.example.com/search?query=${query}`)
            .then(response => response.json())
            .then(data => setData(data));
    }, [query]); // جلب البيانات كلما تغير query

    return (
        <div>
            <input
                type="text"
                value={query}
                onChange={(e) => setQuery(e.target.value)}
                placeholder="Search..."
            />
            <div>{data ? JSON.stringify(data) : 'No data'}</div>
        </div>
    );
};

export default DataFetchWithInput;


9. تنفيذ دالة عند تحميل الصور:

import React, { useState, useEffect } from 'react';

const ImageLoader = () => {
    const [loaded, setLoaded] = useState(false);

    useEffect(() => {
        const img = new Image();
        img.src = 'https://via.placeholder.com/150';
        img.onload = () => setLoaded(true);
    }, []); // تحميل الصورة مرة واحدة عند تصيير المكون

    return (
        <div>
            {loaded ? <img src="https://via.placeholder.com/150" alt="Placeholder" /> : 'Loading...'}
        </div>
    );
};

export default ImageLoader;


10. تغيير السمة (Theme) عند تغيير الحالة:

import React, { useState, useEffect } from 'react';

const ThemeToggle = () => {
    const [darkMode, setDarkMode] = useState(false);

    useEffect(() => {
        document.body.className = darkMode ? 'dark-mode' : 'light-mode';
    }, [darkMode]); // تغيير السمة عند تحديث darkMode

    return (
        <div>
            <button onClick={() => setDarkMode(!darkMode)}>Toggle Theme</button>
            <div>Current Theme: {darkMode ? 'Dark' : 'Light'}</div>
        </div>
    );
};

export default ThemeToggle;





تعليقات

المشاركات الشائعة

ما هو JSX في React؟

مثال بسيط يوضح كيفية استخدام createContext و useContext لتمرير البيانات بين المكونات في React

مثال لتمرير مصفوفة عن طريق useState

إضافة الأنماط في React

المكونات (Components) في React

ما هي Props في React؟

هيكلة المشروع في React

الأمر npx create-react-app my-app

10 أمثلة على استخدام props في React

تطبيق توليد لون عشوائي للصفحة في React