سأقدم لك 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;
 
 
 
 | 
 
تعليقات
إرسال تعليق