لسوء الحظ، تم التقليل من قيمة useRef. وهي ليست من بين الخطافات الأكثر شعبية، ولكنها مفيدة. معرفة كيفية ومكان استخدامه يمكن أن يحقق نتائج رائعة.
useRef هو خطاف تفاعلي يتيح لك الإشارة إلى قيمة غير مطلوبة للعرض.
ستتذكر React القيمة التي أنشأتها من خلال useRef، سواء كنت تنشئ كائن JavaScript يشير إلى عقدة في DOM أو قيمة بسيطة، ولن يتم فقدها أثناء عمليات إعادة العرض.
الوصول إلى عناصر DOM:
تخزين القيم القابلة للتغيير:
إليك بعض الأمثلة لتوضيح قوة الاستخدامالمرجع.
import React, { useRef } from 'react'; const Counter = () => { const refCount = useRef(0); const refInputField = useRef(null); const onClick = () => { refCount.current = refCount.current 1; refInputField.current.focus(); } return ( > ); }; export default Counter;
في هذا المثال:
حالة الاستخدام الشائعة الأخرى لـ useRef هي تتبع القيم السابقة.
import React, { useRef, useEffect, useState } from 'react'; const PreviousValue = () => { const [count, setCount] = useState(0); const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; }, [count]); return (); }; export default PreviousValue;Current Count: {count}
Previous Count: {prevCountRef.current}
في هذا المثال:
يمكن استخدام useRef لاستمرار القيم عبر عمليات العرض دون التسبب في إعادة العرض، على عكس useState. وهذا مفيد بشكل خاص لتخزين القيم التي لا تؤثر بشكل مباشر على واجهة المستخدم ولكن يجب تذكرها.
مثال: تتبع عدد عرض أحد المكونات.
import React, { useRef, useEffect } from 'react'; const RenderCounter = () => { const renderCount = useRef(0); useEffect(() => { renderCount.current = 1; }); return (); }; export default RenderCounter;This component has rendered {renderCount.current} times
يعد useRef أمرًا لا يقدر بثمن عند العمل مع مكتبات الجهات الخارجية التي تتطلب معالجة مباشرة لعناصر DOM، مثل التكامل مع مكتبات الرسوم البيانية، أو إدارة مشغلات الفيديو، أو التعامل مع الرسوم المتحركة.
مثال: دمج مكتبة الرسوم البيانية.
import React, { useRef, useEffect } from 'react'; import Chart from 'chart.js/auto'; const ChartComponent = () => { const chartRef = useRef(null); useEffect(() => { const ctx = chartRef.current.getContext('2d'); new Chart(ctx, { type: 'line', data: { labels: ['January', 'February', 'March', 'April'], datasets: [{ label: 'Sales', data: [65, 59, 80, 81], }], }, }); }, []); return ; }; export default ChartComponent;
في التطبيقات المعقدة حيث يكون الأداء أمرًا بالغ الأهمية، فإن استخدام useRef لتخزين الكائنات القابلة للتغيير يمكن أن يساعد في تجنب عمليات إعادة العرض غير الضرورية.
مثال: تخزين كائن حالة قابل للتغيير.
import React, { useRef } from 'react'; const MutableState = () => { const state = useRef({ name: 'John Doe', age: 30, }); const updateName = (newName) => { state.current.name = newName; console.log('Name updated:', state.current.name); }; return (); }; export default MutableState;
استخدام useRef يمكن أن يساعد في تجنب مشكلات الإغلاق من خلال توفير مرجع ثابت لقيمة تستمر عبر العروض.
مثال: مؤقت مع useRef لتجنب الحالة التي لا معنى لها.
import React, { useRef, useState, useEffect } from 'react'; const Timer = () => { const [count, setCount] = useState(0); const countRef = useRef(count); countRef.current = count; useEffect(() => { const intervalId = setInterval(() => { setCount(countRef.current 1); }, 1000); return () => clearInterval(intervalId); }, []); returnCount: {count}; }; export default Timer;
الخطافات رائعة ويجب عليك استخدامها. يمكنك تحقيق الكثير إذا فهمت كيفية عمل React وقمت بتطبيق الخطافات بشكل صحيح. useRef قوي بشكل خاص لـ:
من خلال فهم useRef واستخدامه، يمكنك كتابة مكونات React أكثر كفاءة وفعالية. تكمن القوة الحقيقية للخطافات في فهم سلوكها وتطبيقها بحكمة.
هل تعلم أن useState ليس دائمًا هو الإجابة الصحيحة؟
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3