«useCallback» در مقابل «useMemo» Hooks – انجمن DEV

راهنمای یادگیری React
افزایش عملکرد React: useCallback در مقابل useMemo قلاب
واکنش نشان دهید useCallback و useMemo قلاب ها برای بهینه سازی عملکرد در برنامه های شما بسیار مهم هستند. درک زمان و نحوه استفاده از آنها می تواند شما را از رندرهای مجدد غیرضروری نجات دهد و اطمینان حاصل کند که برنامه شما به خوبی اجرا می شود. در این مقاله، نمونههای واقعی استفاده را بررسی خواهیم کرد useCallback و useMemo به طور موثر
زمان استفاده useCallback
را useCallback hook یک نسخه ذخیرهسازیشده از تابع callback را برمیگرداند، به این معنی که تنها در صورتی که یکی از وابستگیهای آن تغییر کند، تابع را دوباره ایجاد میکند. این به ویژه هنگام انتقال توابع به عنوان پایه به اجزای فرزند برای جلوگیری از رندر مجدد غیرضروری آنها مفید است.
مثال بلادرنگ: جلوگیری از رندرهای غیرضروری
فرض کنید یک جزء والد دارید که تابعی را به یک جزء فرزند ارسال می کند. بدون useCallback، مولفه فرزند هر بار که مولفه والد رندر می شود دوباره رندر می شود، حتی اگر منطق تابع تغییر نکرده باشد.
import React, { useState, useCallback } from 'react';
import ChildComponent from './ChildComponent';
const ParentComponent = () => {
const [count, setCount] = useState(0);
// Using useCallback to memoize the function
const handleIncrement = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
<div>
<h1>Count: {count}h1>
<ChildComponent onIncrement={handleIncrement} />
div>
);
};
export default ParentComponent;
در مثال بالا، handleIncrement با حفظ است useCallback. را ChildComponent فقط زمانی دوباره رندر می شود count تغییرات، جلوگیری از رندرهای غیر ضروری و بهبود عملکرد.
زمان استفاده useMemo
را useMemo از hook برای به خاطر سپردن نتیجه یک تابع استفاده می شود و نتیجه ذخیره شده را تنها زمانی که یکی از وابستگی های آن تغییر می کند دوباره محاسبه می کند. برای بهینه سازی عملکرد در شرایطی که یک تابع محاسبه گران قیمتی را انجام می دهد مفید است.
مثال بلادرنگ: بهینه سازی محاسبات گران قیمت
فرض کنید یک مؤلفه دارید که عملیات محاسباتی گرانی را انجام می دهد، مانند فیلتر کردن یک لیست بزرگ.
import React, { useState, useMemo } from 'react';
const ExpensiveComponent = ({ items }) => {
const [filter, setFilter] = useState('');
// Using useMemo to optimize expensive filtering
const filteredItems = useMemo(() => {
console.log('Filtering items...');
return items.filter(item => item.includes(filter));
}, [items, filter]);
return (
<div>
<input
type="text"
value={filter}
onChange={(e) => setFilter(e.target.value)}
placeholder="Filter items"
/>
<ul>
{filteredItems.map((item, index) => (
<li key={index}>{item}li>
))}
ul>
div>
);
};
export default ExpensiveComponent;
در این مثال، useMemo برای کش کردن نتیجه فیلتر کردن استفاده می شود items آرایه به این ترتیب، عملیات فیلترینگ گران قیمت فقط زمانی دوباره محاسبه می شود items یا filter تغییرات، اجتناب از محاسبات غیر ضروری.
راهنمای استفاده useCallback و useMemo
-
استفاده کنید
useCallbackهنگام انتقال توابع به اجزای فرزند برای جلوگیری از رندرهای مجدد غیر ضروری. -
استفاده کنید
useMemoبرای محاسبات گران قیمت که نیازی به محاسبه مجدد در هر رندر ندارند. - از استفاده بیش از حد از آنها خودداری کنید. یادداشت کردن پیچیدگی میافزاید و گاهی اوقات خواندن کد را سختتر میکند. فقط زمانی از آنها استفاده کنید که مشکل عملکرد را شناسایی کنید.
- آرایه وابستگی ها را به خاطر بسپارید. همیشه وابستگی ها را با دقت مشخص کنید. در غیر این صورت، ممکن است با اشکال یا رفتار غیرمنتظره مواجه شوید.
نتیجه گیری
واکنش نشان دهید useCallback و useMemo هوک ها ابزار قدرتمندی برای بهینه سازی عملکرد اجزا با اجتناب از رندرهای غیرضروری و محاسبات گران قیمت هستند. با اعمال دقیق این هوک ها، می توانید مطمئن شوید که برنامه React شما به طور موثر اجرا می شود.



