در React، هوک‌ها (Hooks) توابعی هستند که به شما اجازه می‌دهند بدون نوشتن کلاس، از state و دیگر قابلیت‌های React استفاده کنید. در ادامه مهم‌ترین هوک‌های React را با توضیح معرفی می‌کنم:

useState

این هوک برای تعریف state در یک کامپوننت تابعی استفاده می‌شود. شما می‌توانید یک مقدار اولیه به آن بدهید و تابعی برای به‌روزرسانی آن مقدار نیز دریافت کنید.

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

useEffect

این هوک برای مدیریت (مانند فراخوانی API، تنظیم تایمر، یا تعامل با DOM) در کامپوننت‌های تابعی استفاده می‌شود. می‌تواند مشابه متدهای componentDidMount, componentDidUpdate, و componentWillUnmount در کلاس‌ها عمل کند.

useEffect(() => {
  // این کد در هر بار رندر شدن اجرا می‌شود
  console.log('Component rendered');

  // این تابع تمیزکننده است و بعد از هر رندر یا حذف کامپوننت اجرا می‌شود
  return () => {
    console.log('Component cleaned up');
  };
}, []); // اگر از آرایه خالی استفاده شود، فقط یک‌بار اجرا می‌شود (مثل componentDidMount).

useContext

این هوک برای دسترسی به مقادیر Context (مقادیر سراسری در اپلیکیشن) استفاده می‌شود. شما می‌توانید Context را در سرتاسر کامپوننت‌ها بدون نیاز به پراپ‌زنی (props drilling) به اشتراک بگذارید.

const value = useContext(MyContext);

useReducer

این هوک برای مدیریت state‌های پیچیده استفاده می‌شود. شبیه به useState است، اما برای مواقعی که حالت‌های مختلف و منطقی نیاز به اعمال دارید، مناسب‌تر است.

const [state, dispatch] = useReducer(reducer, initialState);

useRef

این هوک به شما امکان می‌دهد یک شیء mutable (قابل تغییر) ایجاد کنید که در کل چرخه عمر کامپوننت ثابت بماند. معمولاً برای دسترسی مستقیم به عناصر DOM یا ذخیره مقادیری که باعث رندر مجدد نمی‌شوند، استفاده می‌شود.

const inputRef = useRef(null);

useMemo

این هوک برای بهینه‌سازی رندرها استفاده می‌شود. زمانی که محاسبات سنگین انجام می‌دهید و نمی‌خواهید که این محاسبات در هر رندر اجرا شوند، از useMemo استفاده کنید.

const expensiveValue = useMemo(() => computeExpensiveValue(data), [data]);

useCallback

شبیه به useMemo است، اما به جای محاسبه یک مقدار، یک تابع بازگشتی می‌دهد که تنها زمانی که وابستگی‌ها تغییر کنند، به روز می‌شود.

const handleClick = useCallback(() => {
  console.log('Clicked');
}, []);

useLayoutEffect

این هوک مشابه useEffect است، با این تفاوت که در فاز layout رندر React اجرا می‌شود، یعنی قبل از نمایش به کاربر. از آن زمانی استفاده می‌شود که نیاز دارید تغییرات شما در DOM بلافاصله قبل از رندر اعمال شود.

useLayoutEffect(() => {
  console.log('Layout effect');
});

useImperativeHandle

این هوک به شما اجازه می‌دهد که کنترل بیشتری روی رفرنس‌ها (Refs) در کامپوننت‌های تابعی داشته باشید. معمولاً به همراه forwardRef استفاده می‌شود.

useImperativeHandle(ref, () => ({
  scrollToTop() {
    scrollRef.current.scrollTop = 0;
  }
}));

useDebugValue

این هوک برای دیباگ کردن هوک‌های سفارشی (custom hooks) استفاده می‌شود. می‌توانید برای هر هوک سفارشی یک مقدار دیباگ مشخص کنید که در ابزارهای دیباگ نمایش داده شود.

useDebugValue(isOnline ? 'Online' : 'Offline');

این لیست از هوک‌های اصلی React است که برای مدیریت state، اثرات جانبی، رفرنس‌ها و بهینه‌سازی رندر استفاده می‌شوند.