React.Component — sınıf bileşenleri ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-07-04 Okuma süresi: 9 dk

React.Component, React'te kalıtım kullanarak bileşen oluşturmak için temel sınıftır. 16.8 sürümünde hook'ların tanıtılmasından önce, sınıf bileşenleri durum ve yaşam döngüsünü yönetmenin tek yoluydu. React, 2024'e göre, sınıf bileşenleri hala desteklenmektedir, ancak yeni projeler için hook'lu fonksiyonel bileşenler önerilmektedir.

Önemli Noktalar

  • React.Component, sınıf bileşenlerinin extends Component aracılığıyla miras aldığı temel sınıftır.
  • Durum (State) this.state ile yönetilir ve yalnızca this.setState ile güncellenir — doğrudan değişiklik yasaktır.
  • Yaşam döngüsü, componentDidMount, componentDidUpdate ve componentWillUnmount metotlarını içerir.
  • this, sınıf metotlarında bağlam bağlaması gerektirir — bind, ok fonksiyonları veya class fields aracılığıyla.
  • Göç fonksiyonel bileşenlere kademeli olarak mümkündür: hook'lar ve sınıflar aynı projede bir arada bulunabilir.

React.Component Nedir?

React.Component, durum, prop'lar ve bileşen yaşam döngüsü ile çalışmak için yerleşik metotlar sağlayan soyut bir sınıftır. Bir sınıf bileşeni oluşturmak için, React.Component'i genişleten bir sınıf tanımlamanız ve render metotunu uygulamanız gerekir.

React.Component, React'in ilk sürümünde (2013) ortaya çıktı ve beş yıl boyunca bileşen oluşturmanın birincil yolu olarak kaldı. React ekosistemi sınıflar etrafında inşa edildi: yüksek dereceli bileşenler (HOC), render props, bağlam — tüm bu desenler sınıf sözdizimi kullanılarak uygulandı.

2019'da React 16.8'in piyasaya sürülmesiyle, React ekibi sınıflara alternatif olarak hook'ları tanıttı. Hook'lar aynı sorunları — durum, efektler, bağlam — çözdü, ancak kalıtım ve karmaşık bağlam bağlaması olmadan. React.Component tamamen desteklenmeye devam ediyor, ancak yeni projeler için fonksiyonel yaklaşım önerilmektedir.

Sınıf Bileşeni Oluşturma

En küçük sınıf bileşeni, bir React öğesi döndüren tek bir render metotuna sahip bir sınıftır. render tek zorunlu metottur. this.props ve this.state'in saf bir fonksiyonu olmalıdır: aynı prop ve durum kümesi aynı sonucu üretir.

js
import React, { Component } from 'react';

class Welcome extends Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Kurucu ve Durum Başlatma

Kurucu, montajdan önce çalıştırılır. Prop'ları üst sınıfa iletmek için super(props) çağrısını yapar ve this.state'i başlatır. Kurucuyu başka amaçlar için — abonelikler, API çağrıları — kullanmak önerilmez; bunun için componentDidMount vardır.

js
class Counter extends Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  render() {
    return <p>Count: {this.state.count}</p>;
  }
}

this.state ve this.setState ile Durum Yönetimi

this.state, bileşenin verilerini içeren bir nesnedir. Doğrudan değiştirmek (this.state.count = 1) yasaktır — yeniden render tetiklemez ve öngörülebilirliği bozar. Durum, yeni bir durum nesnesi oluşturan ve yeniden render tetikleyen this.setState aracılığıyla güncellenmelidir.

setState bir nesne veya fonksiyon kabul edebilir. Yeni durum öncekine bağlı olduğunda fonksiyonel form tercih edilir: this.setState(prev => ({ count: prev.count + 1 })). React, performans optimizasyonu için birden çok setState çağrısını tek bir toplu işlemde gruplayabilir.

js
class Toggle extends Component {
  constructor(props) {
    super(props);
    this.state = { isOn: false };
  }

  handleClick() {
    this.setState(prev => ({ isOn: !prev.isOn }));
  }

  render() {
    return (
      <button onClick={() => this.handleClick()}>
        {this.state.isOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

setState'in önemli bir özelliği, asenkron olmasıdır. setState'i çağırdıktan sonra durum hemen güncellenmez. Güncellemeden sonra bir eylem gerçekleştirmeniz gerekiyorsa, ikinci argüman olarak bir geri çağrı iletin: this.setState(newState, () => console.log(this.state)).

Yaşam Döngüsü Metotları

Sınıf bileşenleri, React'in belirli anlarda çağırdığı önceden tanımlanmış metotlara sahiptir. Montaj — constructor → render → componentDidMount. Güncelleme — render → componentDidUpdate. Montajdan Çıkarma — componentWillUnmount.

MetotAşamaAmaç
constructorMontajDurumu başlatma ve metotları bağlama
renderHer seferindeReact öğeleri döndürme (zorunlu)
componentDidMountMontajdan sonraAPI istekleri, abonelikler, zamanlayıcılar
componentDidUpdateGüncellemeden sonraProp/durum değişikliklerine tepki
componentWillUnmountKaldırmadan önceAbonelikleri, zamanlayıcıları, olay dinleyicilerini temizleme

ComponentDidMount — Veri Getirme

componentDidMount, ilk renderdan sonraki yan etkiler için ana yerdir. Burada HTTP istekleri yapılır, WebSocket bağlantıları kurulur ve zamanlayıcılar başlatılır. componentWillUnmount'ta aboneliği temizlemezseniz, bellek sızıntısı oluşur.

js
class UserProfile extends Component {
  componentDidMount() {
    fetch(`/api/users/${this.props.userId}`)
      .then(res => res.json())
      .then(data => this.setState({ user: data }));
  }

  componentWillUnmount() {
    // Cancel request on unmount
  }

  render() {
    return <div>{this.state.user?.name}</div>;
  }
}

Metotlarda this Bağlamını Bağlama

JavaScript'te, sınıf metotları varsayılan olarak örneğe bağlı değildir. Bir metodu geri çağrı olarak iletirseniz — bir olay işleyiciye, bir zamanlayıcıya — this undefined (katı modda) veya window (katı mod olmadan) olur. Bağlama olmadan, this.setState hata fırlatır.

Bağlamanın üç yolu vardır: kurucuda bind, geri çağrıda ok fonksiyonu ve ok fonksiyonu ile class field. İlk yöntem React'in resmi önerisidir: kurucuda bir kez bağlayın, her renderda fonksiyonu yeniden oluşturmadan.

js
// Method 1: bind in constructor (recommended)
class MyComponent extends Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({ clicked: true });
  }

  render() {
    return <button onClick={this.handleClick}>Click</button>;
  }
}

Class fields — otomatik bağlama ile modern sözdizimi. Bir sınıf özelliğindeki ok fonksiyonu, kurucunun kapsamından this'i yakalar. Dezavantajı, metotun prototip yerine her örnekte oluşturulmasıdır, bu da aynı türden yüzlerce bileşen için bellek kullanımını artırır.

Sınıf vs Fonksiyonel Bileşenler

Sınıf ve fonksiyon arasındaki seçim yalnızca sözdizimi meselesi değildir. Hook'lu fonksiyonel bileşenler, sınıflara özgü sorunları çözer: farklı yaşam döngüsü metotlarında (componentDidMount + componentDidUpdate) mantık tekrarı, this ile karmaşıklık ve ilgili mantığı yeniden kullanılabilir bir bloğa çıkaramama.

Fonksiyonel bileşenlerin test edilmesi daha kolaydır — iç durumları yoktur (hook'lardan önce yalnızca sınıflarda mevcuttu) ve geri çağrıları doğrulamak için DOM montajı gerektirmezler. React, tüm yeni projeler için fonksiyonel bileşenleri önerir; dokümantasyon ve örnekler onlarla yazılır.

Sınıf bileşenleri, eski kod ile çalışırken en iyi seçim olmaya devam eder. Bir proje 2019'dan önce başlatıldıysa, muhtemelen binlerce sınıf bileşeni içerir. Hepsini tek bir sprintte hook'lara yeniden yazmak risklidir. React geriye dönük uyumluluğu garanti eder: sınıf bileşenleri kaldırılmayacaktır.

Sınıflardan Hook'lara Göç Stratejisi

Aşamalı göç, bileşenin analiziyle başlar. Durumsuz basit bileşenler önce dönüştürülür — bunlar kolayca fonksiyonlarla değiştirilir. Ardından — bir veya iki durum alanı olan bileşenler, burada useState doğrudan this.state ve this.setState'in yerini alır.

Birden çok yaşam döngüsü metotuna sahip karmaşık bileşenler useEffect kullanılarak dönüştürülür. componentDidMount + componentDidUpdate'teki mantık, farklı bağımlılıklarla ayrı useEffect çağrılarına bölünür. componentWillUnmount, useEffect içinde bir dönüş fonksiyonuyla değiştirilir. Karmaşık durum mantığı için useReducer kullanın.

Otomatik göç araçları — @phenomnomnominal/ts-react-class-to-hook veya codemod script'leri — basit sınıfları otomatik olarak dönüştürebilir. Karmaşık durumlarda, göç, kaynak bileşenin mantığını anlamayı gerektiren manuel bir iş olarak kalır.

Sıkça Sorulan Sorular

Kurucuda super(props) çağırmak zorunlu mu?

Evet. super(props), prop'ları üst React.Component'e iletir. Bu çağrı olmadan, this.props kurucu içinde undefined olur. Render ve yaşam döngüsü metotlarında, prop'lar super olmadan da erişilebilirdir, ancak bu uygulamanın tali davranışıdır.

setState neden asenkrondur?

React, gereksiz yeniden renderları azaltmak için birden çok setState çağrısını tek bir toplu işlemde gruplar. setState senkron olsaydı, her çağrı anında render tetikler ve toplu güncellemeler sırasında performansı düşürürdü.

Bir sınıf bileşeni içinde hook kullanabilir miyim?

Hayır. Hook'lar yalnızca fonksiyonel bileşenlerde çalışır. Sınıf bileşenleri olan projeler için, tüm eski desenler mevcuttur: render props, HOC ve bağlam için Consumer. Hook'lara göç etmek, sınıfın bir fonksiyona dönüştürülmesini gerektirir.

PureComponent nedir ve Component'ten farkı nedir?

React.PureComponent, prop'ların ve durumun yüzeysel karşılaştırmasıyla shouldComponentUpdate'i uygular. setState ile her zaman yeniden render yapan Component'in aksine, PureComponent veri değişmediyse yeniden renderı atlar. Bu, karmaşık iç içe yapısı olmayan bileşenler için bir optimizasyondur.

Bir sınıf bileşeninde hatayı nasıl ele alırım?

componentDidCatch ve getDerivedStateFromError kullanın. componentDidCatch(error, info) hatayı günlüğe kaydeder. getDerivedStateFromError, yedek bir arayüz göstermek için durumu günceller. Bu metotlar yalnızca sınıf bileşenlerinde çalışır — fonksiyonların bir ErrorBoundary sarmalayıcı bileşene ihtiyacı vardır.

Özet

  • React.Component, kalıtım, durum ve yaşam döngüsü metotlarına sahip bileşenler için temel sınıftır.
  • this.state kurucuda başlatılır, yalnızca this.setState ile güncellenir — doğrudan değişiklik yasaktır.
  • componentDidMount, ilk renderdan sonra API istekleri, abonelikler ve zamanlayıcılar için ana yerdir.
  • componentWillUnmount, bellek sızıntılarını önlemek için aboneliklerin ve zamanlayıcıların zorunlu temizliğidir.
  • this bağlama zorunludur: kurucuda bind, geri çağrı metotları için önerilen yaklaşımdır.
  • Hook'lar yeni projeler için sınıf bileşenlerinin yerini almıştır, ancak sınıflar tamamen desteklenmeye devam etmektedir.
  • Göç hook'lara kademeli olarak yapılır: önce durumsuz bileşenler, karmaşık olanlar useReducer ve useEffect aracılığıyla.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun