React'te Fonksiyonel Bileşenler — Modern Geliştirme Standardı

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

Functional Component — React 16.8'in yayınlanması ve hook'ların ortaya çıkmasından sonra standart haline gelen, sıradan JavaScript işlevlerini kullanarak React bileşenleri oluşturmanın bir yoludur. Fonksiyonel bileşenler props alır ve React.Component'ten miras almadan React öğeleri döndürür. React, 2024'e göre, React ekosistemindeki yeni bileşenlerin %97'si işlev olarak yazılır.

Ana Noktalar

  • Functional Component — extends Component olmadan props alan ve JSX döndüren sıradan bir JavaScript işlevi.
  • Hook'lar (useState, useEffect, useContext) fonksiyonel bileşenlere durum ve yaşam döngüsüne tam erişim sağlar.
  • Okunabilirlik — fonksiyonel bileşenler, sınıf bileşenlerinden daha kısadır; kurucu, bind ve fazladan yaşam döngüsü yöntemi yoktur.
  • Performans — React, fonksiyonel bileşenleri bellekte tutma ve tembel başlatma yoluyla optimize eder.
  • React Önerisi — tüm yeni projeler yalnızca hook'larla birlikte fonksiyonel bileşenleri kullanmalıdır.

Functional Component Nedir?

Functional Component, bir props nesnesini alan ve bir React öğesi döndüren bir işlev olarak tanımlanan React bileşenidir. React 16.8'den önce, bu bileşenler durumsuz olarak adlandırılırdı çünkü iç durumu yönetemiyorlardı.

React 16.8'de (Şubat 2019) hook'ların tanıtılmasıyla, fonksiyonel bileşenler duruma (useState), yan etkilere (useEffect), bağlama (useContext) ve referanslara (useRef) erişim kazandı. ‘Durumsuz’ terimi güncelliğini yitirdi — modern fonksiyonel bileşenler durumu tamamen yönetir.

React resmi olarak fonksiyonel bileşenleri bileşen oluşturmanın birincil yolu olarak önerir. react.dev'deki tüm dokümantasyon, örnekler, eğitimler ve yeni API'ler (Server Components, Actions) işlevsel yaklaşım üzerine inşa edilmiştir. Sınıf bileşenleri kaldırılmamıştır, ancak React'in yeni özellikleri yalnızca hook'lar aracılığıyla kullanılabilir.

Fonksiyonel Bileşen Oluşturma

En basit fonksiyonel bileşen, JSX döndüren bir işlevdir. Props'u argüman olarak alır, kurucu, super çağrısı veya this bağlaması gerektirmez. Props, işlev argümanı aracılığıyla doğrudan erişilebilirdir — this.props gerekmez.

js
// Functional component without state
function Greeting({ name }) {
  return <h1>Hello, {name}!</h1>;
}

// Arrow function (common variant)
const Greeting = ({ name }) => (
  <h1>Hello, {name}!</h1>
);

Durumlu Bileşen

Durum eklemek için useState'i kullanın. Hook, iki değerden oluşan bir demet döndürür: geçerli durum ve bir ayarlayıcı işlev. Sınıf tabanlı this.setState'ten farklı olarak useState, değeri öncekiyle birleştirmek yerine tamamen değiştirir.

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

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
    </div>
  );
}

Fonksiyonel Bileşenlerde Hook'lar

Hook'lar modern React'in temelidir. Her hook belirli bir görevi çözer: useState — durum, useEffect — yan etkiler, useContext — bağlam erişimi, useRef — DOM öğesi referansları, useCallback ve useMemo — bellekte tutma.

Yan Etkiler için useEffect

useEffect, componentDidMount, componentDidUpdate ve componentWillUnmount'ı aynı anda değiştirir. İlk argüman, etkiye sahip geri çağırmadır, ikincisi bağımlılık dizisidir. Dizi boşsa, etki bağlamadan sonra bir kez çalışırır. Bağımlılıklar belirtilmişse, bunlardan herhangi biri değiştiğinde çalışırır.

js
import React, { useState, useEffect } from 'react';

function UserData({ userId }) {
  const [user, setUser] = useState(null);

  useEffect(() => {
    let cancelled = false;

    fetch(`/api/users/${userId}`)
      .then(res => res.json())
      .then(data => {
        if (!cancelled) setUser(data);
      });

    // Cleanup - analog of componentWillUnmount
    return () => { cancelled = true; };
  }, [userId]); // Dependency

  return <div>{user?.name}</div>;
}

Özel Hook'lar

Fonksiyonel bileşenlerin ana avantajı, özel hook'lar aracılığıyla mantık yeniden kullanımıdır. Sınıf bileşeninde mantık, componentDidMount ve componentDidUpdate arasında çoğaltılırken, fonksiyonel bileşende use ön eki olan ayrı bir işleve çıkarılır. Özel hook'lar, HOC ve render props'a birincil alternatiftir.

Kalıtım Yerine Bileşim

React, bileşenler arasında kod yeniden kullanımı için kalıtım yerine bileşimi önerir. Fonksiyonel bileşenler bileşim için idealdir: bir bileşen, onlara props ve children geçerek birden çok başka bileşen içerebilir.

Children deseni — bir bileşenin children prop'u aracılığıyla alt öğeler alması — doğal olarak uygulanır: function Layout({ children }). Vue slotlarının benzeri, adlandırılmış bileşen props'ları aracılığıyla uygulanır: function Page({ header, sidebar, content }).

Kalıtım React'te neredeyse hiç kullanılmaz. Teknik olarak extends'i destekleyen sınıf bileşenleri bile nadiren bir seviyeden daha derin hiyerarşiler oluşturur. Bileşim ile fonksiyonel bileşenler, kalıtım olmadan kod yeniden kullanım ihtiyaçlarını tamamen karşılar.

Performans Optimizasyonu

Fonksiyonel bileşenler, yerleşik optimizasyon mekanizmalarıyla gelir. React.memo — işlevler için PureComponent karşılığı: props değişmediyse yeniden oluşturmayı önler (yüzeysel karşılaştırma). useMemo, oluşturmalar arasında hesaplama sonuçlarını önbelleğe alır.

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

// React.memo - memoize component
const ExpensiveList = React.memo(({ items }) => {
  return <ul>
    {items.map(item =>
      <li key={item.id}>{item.name}</li>
    )}
  </ul>;
});

// useMemo - caching result
function Dashboard({ transactions }) {
  const summary = useMemo(() => {
    return transactions.reduce((acc, t) => acc + t.amount, 0);
  }, [transactions]);

  return <p>Total: {summary}</p>;
}

useCallback, geri çağırma işlevlerini bellekte tutar, böylece her oluşturmada yeniden oluşturulmazlar. Bu, React.memo ile sarılmış alt bileşenlere işlev geçirirken kritiktir: useCallback olmadan, alt bileşen her seferinde yeniden oluşturulur çünkü işlev başvurusu değişir.

Fonksiyonel ve Sınıf Bileşenleri

Yaklaşımlar arasındaki fark sözdiziminin ötesine geçer. Fonksiyonel bileşenler kapanışlardır: durum ve etkiler belirli bir oluşturmaya bağlıdır. Sınıf bileşenleri this'i kullanır: durum her zaman this.state'den alınır ve bu, zaman uyumsuz bir geri çağırma yürütüldüğünde güncelliğini yitirmiş olabilir.

YönFonksiyonelSınıf
DurumuseState (izole)this.state + this.setState
EtkilerBağımlılıklarla useEffectcomponentDidMount + componentDidUpdate
BağlamuseContextContext.Consumer veya static contextType
OptimizasyonReact.memo + useMemoPureComponent + shouldComponentUpdate
Mantık Yeniden KullanımıÖzel hook'larHOC / Render props
thisYokKurucuda bind

Fonksiyonel bileşenler doğrusal bir yürütme akışı sağlar. Bir sınıf bileşeninde, ilgili mantık genellikle birden çok yaşam döngüsü yöntemine dağılmıştır. Örneğin, bir WebSocket aboneliği componentDidMount'da kurulur ve componentWillUnmount'da kaldırılır. Fonksiyonel bir bileşende, her iki işlem de bir dönüş temizleme işleviyle tek bir useEffect içindedir.

TypeScript ve Fonksiyonel Bileşenler

TypeScript, sınıflardan daha doğal bir şekilde fonksiyonel bileşenlerle çalışırır. Props yazımı — işlev argümanı için bir arayüz. Dönüş türü JSX.Element veya ReactNode'dur. useState, başlangıç değerinden türü otomatik olarak çıkarır.

ts
import React, { useState } from 'react';

interface ButtonProps {
  label: string;
  variant?: 'primary' | 'secondary';
  onClick: () => void;
}

const Button: React.FC<ButtonProps> =
  ({ label, variant = 'primary', onClick }) => (
    <button
      className={`btn btn-${variant}`}
      onClick={onClick}
    >
      {label}
    </button>
  );

Modern TypeScript, ayrılmış birleşim türleriyle useReducer yazmaya, özel hook'larda jeneriklere ve React.PropsWithChildren aracılığıyla sıkı alt öğe doğrulamasına izin verir. TypeScript ile fonksiyonel bileşenler, ek soyutlamalar olmadan tam tür güvenliği sağlar.

Sıkça Sorulan Sorular

React neden fonksiyonel bileşenleri öneriyor?

Fonksiyonel bileşenler daha basittir: kurucu, bind, this veya dağınık yaşam döngüsü yöntemleri yoktur. Hook'lar, ilgili mantığı gruplandırmaya izin verir. React, kaynakları sınıfların değil, hook'ların geliştirilmesine yatırır. Server Components ve yeni özellikler yalnızca işlevlerde kullanılabilir.

Bir fonksiyonel bileşende setInterval kullanabilir miyim?

Evet, içinde zamanlayıcı ve clearInterval için temizleme işlevi bulunan useEffect aracılığıyla. Kapanışa dikkat edin: bir sayacı artırıyorsanız, setState'in işlevsel formunu kullanın: setCount(c => c + 1) böylece kapanıştaki eski değere bağımlı olmazsınız.

Bir fonksiyonel bileşende önceki props'ları nasıl alırım?

Önceki değeri depolamak için useRef kullanın. Her oluşturmadan sonra useEffect'te ref'i güncelleyin. Özel hook usePrevious temiz karşılaştırma için yardımcı olur: const prev = usePrevious(value);

React.memo ve useMemo arasındaki fark nedir?

React.memo, tüm bir bileşeni bellekte tutmak için bir HOC'dir: props değişmediyse yeniden oluşturmayı önler. useMemo, bir bileşen içinde belirli bir değeri bellekte tutmak için bir hook'tur: bağımlılık dizisine göre oluşturmalar arasında bir işlev sonucunu önbelleğe alır.

Bir fonksiyonel bileşende getDerivedStateFromProps nasıl simüle edilir?

En basit yol, props'tan başlatma ile useState + senkronizasyon için props'a bağımlılığı olan useEffect kullanmaktır. Nadir durumlarda React, giriş verileri değiştiğinde bileşeni yeniden oluşturmaya zorlamak için bir anahtar (key) kullanılmasını önerir.

Özet

  • Functional Component — modern React standardı: props alan ve JSX döndüren bir işlev.
  • Hook'lar (useState, useEffect) fonksiyonel bileşenlere sınıflar olmadan durum, etkiler ve bağlam verir.
  • Bileşim, children ve özel hook'lar aracılığıyla kalıtım ve HOC desenlerinin yerini alır.
  • React.memo ve useMemo, fonksiyonel bileşenler için performans optimizasyonu sağlar.
  • TypeScript ile fonksiyonel bileşenler, sıkı props yazımı ve otomatik tür çıkarımı sağlar.
  • useEffect, sınıf bileşenlerinin tüm yaşam döngüsü yöntemlerini tek bir yerde değiştirir.
  • Özel hook'lar, HOC olmadan bileşenler arasında mantık çıkarmaya ve yeniden kullanmaya izin verir.

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