تو این مقاله میخوایم به بررسی تخصصی هوک useRef ری اکت و کاربردش در زمینه دسترسی به Element های موجود در DOM بپردازیم. با فِرانت اِندی همراه باشید ?
تو مقاله های قبلی راجب هوک useState و هوک useReducer صحبت کردیم و دیدیم زمانیکه مقادیرشون تغییر میکنه ، کامپوننت ما re-Render میشه ! اما شاید بخوایم یک مقدار ذخیره شده رو تغییر بدیم بطوریکه کامپوننت ما re-Render نشه!
اینجاست که هوک ()useRef میاد وسط ? البته کاربرد های دیگه مثل دسترسی به Element های موجود در DOM هم داره که در ادامه بصورت تخصصی بررسیشون میکنیم.
هوک useRef یکی از هوک های معرفی شده توسط تیم React هست که در نسخه 16.8 معرفی شد.
هوک useRef در React دو کاربرد اصلی داره :
کاربرد اصلی هوک ()useRef دسترسی به Element های موجود در DOM هست. ( اگه در مورد DOM یا Virtual Dom اطلاعاتی ندارید حتما مقاله Virtual Dom ری اکت رو مطالعه کنید )
دومین کاربرد هوک useRef که بسیار هم کاربردیه ، ذخیره یک Mutable Value بین re-Render های مختلف کامپوننت شماست.
نگران نباشید چون قراره تو ادامه این مقاله به زبان ساده اما تخصصی کاربردشون رو بررسی کنیم.
کلمه ref موجود در useRef ، مخفف Reference ( به معنی مرجع ) هست. در حقیقت با هوک useRef یک Reference به اِلِمان موجود در DOM میدیم تا بتونیم هر زمان که لازم بود مستقیما بهش دسترسی داشته باشیم.
برای ایجاد یک refrence به کمک هوک useRef توی کامپوننت خودتون بصورت زیر عمل کنین :
const myRef = useRef();
هنگام ایجاد useRef میشه یک مقدار اولیه هم بهش اختصاص داد :
const myRef = useRef('FrontEndi.com');
هوک useRef مثل مابقی هوک ها ، قابلیت استفاده در Functional Coponent داره و نمیتونید تو Class Component ها ازش استفاده کنید. اگه کامپوننت شما Class Component هست از createRef استفاده کنید.
بطور کل برای استفاده از هوک useRef در React باید 3 مرحله زیر رو انجام داد :
ساختن Ref
const myRef = useRef();
اختصاص مقدار به Ref
myRef.current = "FrontEndi"
دسترسی به مقدار Ref
console.log(myRef.current);
برای دسترسی به Element های موجود در Dom شما باید طبق 3 مرحله بالا عمل کنید . یعنی :
بیاید یه مثال واقعی از ref و هوک ()useRef ری اکت رو باهم بررسی کنیم.
فرض کنیم تو پروژه ای هستیم که نیاز داریم ارتفاع صفحه کاربر رو بر حسب پیکسل بدست بیاریم. پس لازمه که به Element روت خودمون در DOM دسترسی داشته باشیم :
import { useEffect, useRef } from "react" export default function App() { // Create Ref With useRef Hook const divElement = useRef(); // For Get Height of Div Element in First Render useEffect(() => { console.log( "Height of div Element Is :", divElement.current.offsetHeight ); }, []); return ( <div ref={divElement}> <h1> FrontEndi.com :) </h1> </div> ); }
تو مثال بالا به اِلِمان div یک ref دادیم و میتونیم هر زمان که لازم بود در DOM بهش دسترسی داشته باشیم. ( خط 15 )
این ref به کمک هوک useRef در خط 5 ساخته شده.
تو خط 9 به کمک ref ساخته شده تونستیم به اِلِمان div دسترسی داشته باشیم و مقدار ارتفاعش رو ببینیم. ما اینجا خصوصیت offsetHeight رو log گرفتیم اما شما میتونید به هر خصوصیت دیگه ای دسترسی داشته باشید ( با توجه به نیازتون ).
اگه میخواید از useRef در ری اکت استفاده کنید باید چند نکته مهم رو در نظر بگیرید .
برای مطالعه ادامه این مقاله + کد ها و مثال های بیشتر لطفا روی لینک زیر کلیک کنید :