React useRef hooki


useRef hooki renderlar orasidagi qiymatlarni saqlab qolish imkonini beradi.

U qiymat o‘zgarganda qayta render (re-render) qilishga sabab bo‘lmaydigan o‘zgaruvchi qiymatni saqlash uchun ishlatiladi.

U to‘g‘ridan-to‘g‘ri DOM elementiga kirish uchun ishlatilishi mumkin.


ULASHISH

Qayta render (re-render) qilishga sabab bo‘lmaydi

Agar biz useState Hook yordamida ilovamiz necha marta renderlashini hisoblashga harakat qilsak, biz cheksiz siklga tushib qolamiz, chunki bu Hookning o‘zi qayta renderga sabab bo‘ladi.

Buning oldini olish uchun useRef Hook-dan foydalanishimiz mumkin.

Misol:

Ilova renderlarini kuzatish uchun useRef dan foydalaning.

import { useState, useRef, useEffect } from 'react';
import { createRoot } from 'react-dom/client';

function App() {
  const [inputValue, setInputValue] = useState("");
  const count = useRef(0);

  useEffect(() => {
    count.current = count.current + 1;
  });

  return (
    <>
      <p>Type in the input field:</p>
      <input
        type="text"
        value={inputValue}
        onChange={(e) => setInputValue(e.target.value)}
      />
      <h1>Render Count: {count.current}</h1>
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <App />
);

Misolni ishga tushirish »

useRef() faqat bitta elementni qaytaradi. U current nomli obyektni qaytaradi.

useRef ni ishga tushirganimizda biz boshlang‘ich qiymatni o‘rnatamiz: useRef(0) .

Bu shunday qilish kabi: const count = {current: 0} . Hisobga count.current yordamida kirishimiz mumkin.



DOM elementlariga kirish

useRef hooki ko‘pincha ishlatiladi to‘g‘ridan-to‘g‘ri DOM elementlariga kirish.

Birinchidan, useRef Hook yordamida ref yaratamiz: const inputElement = useRef();.

Keyin, JSX da ref atributidan foydalanib, biz ref ni DOM elementiga biriktiramiz: <input type="text" ref={inputElement} /> .

Nihoyat, joriy xususiyat yordamida DOM elementiga kirishimiz mumkin: inputElement.current.

Misol:

Kirishni fokuslash uchun useRef dan foydalaning:

import { useRef } from 'react';
import { createRoot } from 'react-dom/client';

function App() {
  const inputElement = useRef();

  const focusInput = () => {
    inputElement.current.focus();
  };

  return (
    <>
      <input type="text" ref={inputElement} />
      <button onClick={focusInput}>Focus Input</button>
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <App />
);

Misolni ishga tushirish »

Misolda, tugma bosilganda kiritish maydoni diqqatni tortadi, chunki onClick funksiyasi inputElement.current.focus() ni chaqiradi.


State o‘zgarishlarini kuzatish

useRef hookidan oldingi holat qiymatlarini kuzatish uchun ham foydalanish mumkin.

Buning sababi, biz renderlar orasida useRef qiymatlarini saqlab qolishimiz mumkin.

Misol:

Oldingi holat qiymatlarini kuzatish uchun useRef dan foydalaning:

import { useRef, useState, useEffect } from 'react';
import { createRoot } from 'react-dom/client';

function App() {
  const [inputValue, setInputValue] = useState("");
  const previousInputValue = useRef("");

  useEffect(() => {
    previousInputValue.current = inputValue;
  }, [inputValue]);

  return (
    <>
      <input
        type="text"
        value={inputValue}
        onChange={(e) => setInputValue(e.target.value)}
      />
      <h2>Current Value: {inputValue}</h2>
      <h2>Previous Value: {previousInputValue.current}</h2>
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <App />
);

Misolni ishga tushirish »

Bu safar oldingi holatni kuzatish uchun useState, useEffect va useRef kombinatsiyasidan foydalanamiz.

useEffect da biz kiritish maydoniga matn kiritish orqali inputValue har safar yangilanganda useRef joriy qiymatini yangilaymiz.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!