خطاطيف مدمجة في React
تمكنك الخطاطيف (Hooks) من استخدام مزايا مختلفة من React في مكوناتك. يمكنك إما استخدام الخطاطيف المدمجة (المبنية مسبقا)، أو استخدامها لبناء الخطاف الخاص بك. ستريك هذه الصفحة جميع الخطاطيف المبنية مسبقًا في React.
خطاطيف الحالة (State)
تسمح الحالة للمكون “بتذكر” معلومات مثل إدخالات المستخدم. على سبيل المثال، يمكن لمكوّن النموذج Form استخدام الحالة لتخزين قيمة الإدخال، بينما يمكن لمكون معرض الصور استخدام الحالة لتخزين رقم الصورة المختارة.
لإضافة حالة إلى مكون، استخدم أحد هذه الخطاطيف:
useStateيعيّن .متغير حالة يمكنك تحديثه مباشرةuseReducerيعيّن متغير حالة مع منطق التحديث داخل دالة reducer.
function ImageGallery() {
const [index, setIndex] = useState(0);
// ...خطاطيف السياق (Context)
يسمح السياق للمكون بتلقي المعلومات من الآباء البعيدين دون تمريرها كدعامات (props). على سبيل المثال، يمكن لمكوِّن المستوى الأعلى لتطبيقك أن يمرر سمة واجهة المستخدم الحالية إلى جميع المكونات أدناه، بغض النظر عن مدى عمقها.
useContextيقرأ ويحدّث في السياق.
function Button() {
const theme = useContext(ThemeContext);
// ...خطاطيف المرجع
تسمح المراجع للمكون بحمل بعض المعلومات التي لا تُستخدم للعرض ، مثل عنصر DOM أو معرّف المهلة (timeout ID). على عكس الحالة ، لا يؤدي تحديث المرجع إلى إعادة تصيير المكون الخاص بك. المرجع Ref هي “فتحة هروب” من طريقة React. تكون مفيدة عندما تحتاج إلى العمل مع أنظمة غير React، مثل واجهات برمجة تطبيقات المتصفح المضمنة (BOM).
useRefيعيّن المرجع، يمكنك الاحتفاظ بأي قيمة فيه، ولكن غالبًا ما يتم استخدامه لاحتواء عنصر DOMuseImperativeHandleيتيح لك تخصيص المرجع الذي يعرضه المكون الخاص بك. نادرًا ما يُستخدم هذا الخطاف.
function Form() {
const inputRef = useRef(null);
// ...خطاطيف التأثير (Effect)
تسمح التأثيرات للمكون بالاتصال والمزامنة مع الأنظمة الخارجية. يتضمن ذلك التعامل مع الشبكة، ومتصفح DOM، والرسوم المتحركة، وعناصر واجهة المستخدم المكتوبة باستخدام مكتبة واجهة مستخدم مختلفة، وأكواد أخرى غير React.
useEffectيربط المكوّن بنظام خارجي.
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(roomId);
connection.connect();
return () => connection.disconnect();
}, [roomId]);
// ...التأثيرات هي “فتحة هروب” من أسلوب React. لا تَستخدِم التأثيرات لتنظيم تدفق البيانات لتطبيقك. إذا كنت لا تتفاعل مع نظام خارجي، فقد لا تحتاج إلى تأثير.
هناك نوعان نادران من أشكال الاستخدام للتأثير useEffect مع اختلافات في توقيت الاستخدام:
useLayoutEffectينطلق قبل أن يعيد المتصفح اظهار الشاشة. يمكنك قياس التخطيط هنا.useInsertionEffectينطلق قبل أن تُجري React تغييرات على DOM. يمكن للمكتبات إدراج CSS الديناميكي هنا.
خطاطيف الأداء
من الطرق الشائعة لتحسين أداء إعادة العرض تخطي العمل غير الضروري. على سبيل المثال، يمكنك إخبار React بإعادة استخدام نتيجة عملية حسابية مخزنة أو تخطي إعادة التصيير إذا لم تتغير البيانات منذ التصيير السابق.
لتخطي العمليات الحسابية وإعادة التصيير غير الضرورية ، استخدم أحد هذه الخطاطيف:
useMemoيتيح لك تخزين نتيجة عملية حسابية مكلفة.useCallbackيتيح لك تخزين تعريف وظيفة function قبل تمريره إلى مكون محسَّن.
function TodoList({ todos, tab, theme }) {
const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]);
// ...
}في بعض الأحيان، لا يمكنك تخطي إعادة العرض لأن الشاشة تحتاج بالفعل إلى التحديث. في تلك الحالة، يمكنك تحسين الأداء عن طريق فصل التحديثات الحاظرة لمعالجة الكود (blocking) التي يجب أن تكون متزامنة (مثل الكتابة في أحد المدخلات) عن التحديثات غير الحاظرة (non-blocking) التي لا تحتاج إلى حظر واجهة المستخدم (مثل تحديث مخطط).
لتحديد أولوية العرض، استخدم أحد هذه الخطاطيف:
useTransitionيتيح لك اعتبار الحالة غير حاظرة والسماح للتحديثات الأخرى بالتداخل معها.useDeferredValueيتيح لك تأجيل تحديث جزء غير مهم من واجهة المستخدم والسماح للأجزاء الأخرى بالتحديث أولاً.
Other Hooks
هذه الخطاطيف مفيدة في الغالب لمؤلفي المكتبات ولا يتم استخدامها بشكل شائع في كود التطبيق.
useDebugValueيتيح لك تخصيص التسمية التي تعرضها أدوات مطوري React لخطافك المخصص.useIdيتيح للمكون ربط معرف فريد بنفسه (unique ID). تستخدم عادة مع واجهات برمجة إمكانية الوصول API.useSyncExternalStoreيتيح للمكون الاشتراك في مُوَزّع خارجي.
useActionStateيتيح لك إدارة حالة النماذج.
الخطاطيف الخاصة بك
يمكنك أيضًا تعريف الخطاطيف المخصصة الخاصة بك كدوال JavaScript.