هوک ها در واقع تابع هایی هستند که برای اضافه کردن امکانات کامپوننت کلاسی به تابعی در کامپوننت های نوع تابعی مورد استفاده قرار میگیرند . همانطور که هوک useState جهت استفاده از امکان state در کامپوننت نوع تابعی مورد استفاده قرار میگرد ، هوک useEffect نیز جهت استفاده از چرخه حیات مورد استفاده قرار میگیر . در مثال زیر نحوه پیاده سازی mount , didmount, update در هوک useeffect را مشاهده خواهید کرد:
import React, { useEffect, useState } from 'react';
const MyComponent = () => {
// State to track some data
const [data, setData] = useState([]);
// useEffect for component mount (equivalent to componentDidMount)
useEffect(() => { در دل خودش یک کال بک داره
// Code to run when the component mounts
console.log('Component mounted');
// Fetch data or perform any initial setup
fetchData();
// Cleanup function (equivalent to componentWillUnmount)
return () => {
console.log('Component will unmount');
// Perform cleanup tasks if needed
};
}, []); // Empty dependency array means it runs only on mount
// useEffect for component update (equivalent to componentDidUpdate)
useEffect(() => {
// Code to run when data state is updated
console.log('Component updated');
// Additional logic for updates if needed
// Cleanup function (optional)
return () => {
// Cleanup tasks on component update (if needed)
console.log('Cleanup on component update');
};
}, [data]); // Dependency array with 'data' means it runs whenever 'data' changes
// Function to simulate fetching data
const fetchData = () => {
// Simulating asynchronous data fetching
setTimeout(() => {
setData(['Item 1', 'Item 2', 'Item 3']);
}, 1000);
};
return (
<div>
<h2>My Component</h2>
<ul>
{data.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
};
export default MyComponent;
با توجه به این که هر فایل و یا هر کامپوننت وظیفه انجام تنها یک کار را دارد ،پس برای کاتکست هم نیاز به یک فایل مجزا داریم.https://react.dev/learn/passing-data-deeply-with-context