FrontEnd Developer Road Map

React Tutorial 2023 39 – Ref Attribute’u ve useRef() Hook’u

Merhabalar.

Bu yazımda ref ve useRef() Hook’undan bahsedeceğim.

React’te ref ve useRef, bir bileşenin DOM elemanlarına veya diğer React bileşenlerine doğrudan erişim sağlamak için kullanılır. ref (referans), bir bileşenin “hatırlama” bilgilerini sağlar, ancak bu bilgilerin yeni render’lar tetiklememesi gerektiğini belirtir. 

useRef ise, bir bileşenin DOM düğümlerine veya diğer React bileşenlerine doğrudan erişim sağlamak için kullanılır.

useRef hook’u, bir bileşenin DOM düğümüne doğrudan erişim sağlar. Bu, özellikle bir düğmenin DOM düğümünü manipüle etmek için kullanışlıdır. Örneğin, bir düğmeyi programatik olarak odağa getirmek isterseniz, useRef hook’unu kullanabilirsiniz:

Bu kavramı daha iyi kavrayabilmek için bir Focus isimli uygulama yazalım. Basit bir işi yapacak. Bir Input’um bir butonum olacak ve butona bastığımda imleci input içine focuslayacak. Ama bunu useRef kullanarak gerçekleştireceğiz.

Klasör ve Dosyaları Oluştur

Tüm Proje Kodları

Öncelikle kodların tamamını paylaşıp, üzerinden anlatımı gerçekleştirmek istiyorum.

import { useRef, Fragment } from 'react';

const Focus = () => {

const inputRef = useRef(null);

 const handleClick = () => {
   inputRef.current.focus();
 };

  return (
    <Fragment>
     <input ref={inputRef} type="text" />
     <button onClick={handleClick}>Focus the input</button>
   </Fragment>
  )
}

export default Focus

App.Js Güncelle

Uygulamamda sadece Focus component’i çalışsın istiyorum. O yüzden App.js’yi aşağıdaki gibi güncelleyelim.

import './App.css';
import Focus from './Components/Focus/Focus';

function App() {

  return (

    <div className="Outer">

      <div className="Appp">

        { /* <HelloWorld /> <ProductCard /> <Calculator /> */}

        <Focus />
      </div>
    </div>
  );
}

export default App;

useRef Import

useRef Hook’unu kullanabilmek için öncelikle react kütüphanesinden import’unu gerçekleştiriyoruz.

import { useRef, Fragment } from 'react';

useRef Hook’u Oluştur

Bu adımda hangi DOM elemanına ulaşmak istiyorsak bunun için bir useRef Hook’u oluşturuyoruz.

const inputRef = useRef(null);

inputRef isimli bir useRef oluşturdum ve ilk değerini null verdim.

DOM İçinde Ref Kullanımı

Şimdi oluşturduğum useRef Hook’unu, hangi JSX elementiyle eşlemek istiyorsam, o elementim ref attribute’unu kullanarak bu ismi atayacağım.

<input ref={inputRef} type="text" />

Yukarıdaki ref tanımlaması sayesinde artık input’un tüm bilgileri inputRef Hook’una aktarıldı. inputRef’in current özelliği ile elementin tüm özelliklerine ulaşacağız.

useRef Hook’unu Kullan

Buradan sonra amacım şu, butona basılınca imleç input’un içine Focus olsun.

Button’un onClick event’ine istediğim işi yapacak fonksiyonu bağlıyorum.

<button onClick={handleClick}>Focus the input</button>

handleClick Fonksiyonu

const handleClick = () => {
   inputRef.current.focus();
 };

Bu fonksiyon sayesinde inputRef’in yakaladığı elementin current özelliğine erişim sağlayıp burada focus() fonksiyonunu tetikleyerek istediğimiz işlemin yapılmasını sağlıyoruz.

Current Nedir?

Bunun için inputRef’i console’a yazdıralım ve çıktısına göz atalım.

Aşağıda gördüğünüz gibi current elementin kendisini temsil ediyor. Böylece bu current üzerinden istediğimiz tüm özelliklerine erişip manipüle edebiliyoruz.

Test

Uygulamamız bu şekilde gözükecektir. Butona bastığım anda fonksiyonum sayesinde, useRef Hook’unun referans aldığı elementin bilgileri elde edildi ve focus fonksiyonu üzerinde yürütüldü. İmleç input içinde yanıp sönüyor olmalı.

Projeyi İlerletelim

Şunu ekleyerek daha iyi anlayalım.

Bir buton daha ekleyelim ve bu butona tıklandığında, input içine Hello World yazdıralım. Aynı zamanda focus buttonunun yazısını It is my turn olarak değiştirelim.

Burada butona da ulaşmam gerektiği için buton içinde bir useRef Hook’u tanımlayalım. Sonra eklediğim butonun onClick olayına handleHelloWorld fonksiyonunu bağlayalım.

Bu fonksiyon istedim işleri yapsın.

import { useRef, Fragment } from 'react';

const Focus = () => {

    const inputRef = useRef(null);
    const buttonRef = useRef(null);

    const handleClick = () => {
        inputRef.current.focus();
    };

    const handleHelloWorld = () => {
        inputRef.current.value = "Hello World";
        buttonRef.current.innerText = " It is my turn";
    };

    return (
        <Fragment>
            <input ref={inputRef} type="text" />
            <button onClick={handleClick} ref={buttonRef}>Focus the input</button>
            <button onClick={handleHelloWorld}>Write Hello World</button>
        </Fragment>
    )
}

export default Focus

İstediğim sonucu aldım.

useRef Hook’unu öğrenmiş olduk.

Bir sonraki yazımda görüşmek üzere.

Murat Bilginer

21 Şubat 1992'de doğdum. Endüstri Mühendisi olarak lisansımı 2016 yılında tamamladım. Industryolog Akademi - NGenius oluşumlarının kurucusuyum. Şu anda kendi şirketim Brainy Tech ile Web ve Mobil Geliştirme, AWS, Google Cloud Platform Sistemleri için DevOps, Big Data Analiz ve Görselleştirme hizmetleri sunmakta ve Online Eğitimler vermekteyiz.

Share
Published by
Murat Bilginer

Recent Posts

Kedimiz Oly & FIP Süreci 11 – Oly Melek Oldu :'( Veda…

Hüzünlü bir selam. Bu yazı dizisine başlarken büyük umutlarım vardı. Oly’nin FIP durumunu erken teşhis…

1 hafta ago

Kedimiz Oly & FIP Süreci 10 – Oly’nin PCR Sonucu Çıktı FCov Pozitif…

Selamlar, bu yazımda sizlere Oly’nin çıkan PCR sonucu ve geçtiğimiz bir haftada hastalığın genel seyrinden…

1 hafta ago

Kedimiz Oly & FIP Süreci 9 – 1 Haftalık GS İğnesi Serüveni – Oly İyileşiyor mu?

Selamlar, bu yazımda Oly'nin 1 hafta boyunca olduğu GS iğnesi, yaşanan değişimleri anlatmaya çalışacağım. PCR…

2 hafta ago

Kedimiz Oly & FIP Süreci 8 – Yeniden Hayvan Hastanesi – Sonuç Kontrolü ve Sonrası…

Selamlar, bu yazımda Hemogram ve Biyokimya sonuçlarımızı göstermek için İÜCHH'ne tekrar gidişimizi ve sonrasını anlatacağım.…

2 hafta ago

Kedimiz Oly & FIP Süreci 7 – GS İğnesine Başlama Kararımız ve Oly’de Dikkat Ettiklerimiz

Selamlar, bu yazımda GS iğnesine başlama kararımızı ve Oly’de bu süreçte nelere dikkat ediyor, neler…

2 hafta ago

Kedimiz Oly & FIP Süreci 6 – İstanbul Üniversitesi Cerrahpaşa Hayvan Hastanesi Serüveni ve Sonrası

Selamlar, bu yazımda İÜCHH'deki tedavi sürecimiz ve sonrasında yaşananlardan bahsetmeye çalışacağım. 20.06.2025 Cuma günü saat…

2 hafta ago