React-də funksional komponentlər — müasir inkişaf standartı

Müəllif: IT Sectr Dərc olunub: 2026-07-04 Oxuma vaxtı: 9 dəq

Functional Component — adi JavaScript funksiyaları vasitəsilə React komponentləri yaratmaq üsuludur. React 16.8-in buraxılması və hookların meydana çıxmasından sonra standart halına gəldi. Funksional komponentlər props qəbul edir və React-elementlər qaytarır, React.Component-dən miras tələb etmir. React, 2024 məlumatlarına görə, React ekosistemində yeni komponentlərin 97%-i funksiya kimi yazılır.

Əsas

  • Functional Component — props qəbul edən və JSX qaytaran adi JavaScript funksiyası, extends Component olmadan.
  • Hooklar (useState, useEffect, useContext) funksional komponentlərə vəziyyətə və həyat dövrünə tam giriş imkanı verir.
  • Oxunaqlıq — funksional komponentlər sinif komponentlərindən qısadır, konstruktor, bind və əlavə həyat dövrü metodları yoxdur.
  • Performans — React funksional komponentləri memoizasiya və tənbəl inisiallaşdırma vasitəsilə optimallaşdırır.
  • React tövsiyəsi — bütün yeni layihələr yalnız hooklarla funksional komponentlərdən istifadə etməlidir.

Functional Component nədir?

Functional Component (funksional komponent) — props obyektini qəbul edən və React-elementi qaytaran funksiya kimi təyin edilmiş React-komponentdir. React 16.8-dən əvvəl belə komponentlər stateless (vəziyyətsiz) adlanırdı, çünki onlar daxili vəziyyəti idarə edə bilmirdi.

React 16.8-də (fevral 2019) hookların meydana çıxması ilə funksional komponentlər vəziyyətə (useState), yan təsirlərə (useEffect), kontekstə (useContext) və referanslara (useRef) giriş əldə etdi. „Stateless" termini köhnəlib — müasir funksional komponentlər vəziyyəti tam idarə edir.

React rəsmi olaraq funksional komponentləri əsas üsul kimi tövsiyə edir. react.dev saytındakı bütün sənədlər, nümunələr, dərsliklər və yeni API-lər (Server Components, Actions) funksional yanaşmaya əsaslanır. Sinif komponentləri silinməyib, lakin React-in yeni imkanları yalnız hooklar vasitəsilə əlçatandır.

Funksional komponentin yaradılması

Ən sadə funksional komponent — JSX qaytaran funksiyadır. O, props-u arqument kimi qəbul edir, konstruktor, super çağırışı və ya this bağlanması tələb etmir. Props birbaşa funksiya arqumenti vasitəsilə əlçatandır — this.props yoxdur.

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

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

Vəziyyətə malik komponent

Vəziyyət əlavə etmək üçün useState istifadə edin. Hook iki dəyərdən ibarət kortej qaytarır: cari vəziyyət və setter-funksiya. Sinif komponentindəki this.setState-dən fərqli olaraq, useState dəyəri tamamilə əvəz edir, əvvəlki ilə birləşdirmir.

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>
  );
}

Funksional komponentlərdə hooklar

Hooklar müasir React-in əsasıdır. Hər bir hook konkret tapşırığı həll edir: useState — vəziyyət, useEffect — yan təsirlər, useContext — kontekstə giriş, useRef — DOM-elementlərinə istinadlar, useCallbackuseMemo — memoizasiya.

Yan təsirlər üçün useEffect

useEffect eyni anda componentDidMount, componentDidUpdate və componentWillUnmount-u əvəz edir. Birinci arqument — effektli callback, ikincisi — asılılıqlar massividir. Massiv boşdursa, effekt mount-dan sonra bir dəfə icra olunur. Asılılıqlar göstərilibsə — onlardan hər hansı birinin hər dəyişməsində.

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>;
}

Xüsusi hooklar

Funksional komponentlərin əsas üstünlüyü — məntiqin təkrar istifadəsi xüsusi hooklar vasitəsilə. Sinif komponentində məntiq componentDidMount və componentDidUpdate arasında təkrarlanırdısa, funksional komponentdə o, use prefiksi olan ayrıca funksiyaya çıxarılır. Xüsusi hooklar HOC və render props-un əsas alternatifidir.

Miras əvəzinə kompozisiya

React komponentlər arasında kodun təkrar istifadəsi üçün kompozisiyanı tövsiyə edir, mirası yox. Funksional komponentlər kompozisiya üçün idealdır: bir komponent bir neçə başqasını ehtiva edə bilər, onlara props və children ötürərək.

children nümunəsi — komponent children prop vasitəsilə uşaq elementləri qəbul etdikdə — təbii şəkildə həyata keçirilir: function Layout({ children }). Vue-dən slots analoqu adlandırılmış props-komponentlər vasitəsilə həyata keçirilir: function Page({ header, sidebar, content }).

React-də miras praktiki olaraq istifadə edilmir. Hətta texniki cəhətdən extends-i dəstəkləyən sinif komponentləri nadir hallarda bir səviyyədən daha dərin iyerarxiyalar yaradır. Kompozisiyalı funksional komponentlər miras olmadan kodun təkrar istifadəsi ehtiyaclarını tam ödəyir.

Performans optimallaşdırması

Funksional komponentlər daxili optimallaşdırma mexanizmlərinə malikdir. React.memo — funksiyalar üçün PureComponent-in analoqu: props dəyişməyibsə, yenidən renderin qarşısını alır (səthi müqayisə). useMemo renderlər arasında hesablamaların nəticəsini keşləyir.

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 callback-funksiyaları memoizasiya edir ki, onlar hər renderdə yenidən yaradılmasın. Bu, funksiyaları React.memo-ya bükülmüş uşaq komponentlərə ötürərkən vacibdir: useCallback olmadan uşaq komponent hər dəfə yenidən render ediləcək, çünki funksiyaya istinad dəyişir.

Funksional və sinif komponentlərinin müqayisəsi

Yanaşmalar arasındakı fərq sintaksisdən kənara çıxır. Funksional komponentlər — bu domkənardır: vəziyyət və effektlər konkret renderə bağlıdır. Sinif komponentləri — bu this-dir: vəziyyət həmişə this.state-dən götürülür, asinxron callback-in icrası zamanı köhnəlmiş ola bilər.

AspektFunksionalSinif
VəziyyətuseState (izolə)this.state + this.setState
EffektləruseEffect asılılıqlarlacomponentDidMount + componentDidUpdate
KontekstuseContextContext.Consumer və ya static contextType
OptimallaşdırmaReact.memo + useMemoPureComponent + shouldComponentUpdate
Məntiqin təkrarıXüsusi hooklarHOC / Render props
thisYoxdurkonstruktorda bind

Funksional komponentlər xətti icra axını təmin edir. Sinif komponentində əlaqəli məntiq çox vaxt bir neçə həyat dövrü metodu üzrə yayılır. Məsələn, WebSocket abunəliyi componentDidMount-da qurulur və componentWillUnmount-da silinir. Funksional komponentdə hər iki əməliyyat — təmizləmə funksiyası qaytaran bir useEffect-də.

TypeScript və funksional komponentlər

TypeScript funksional komponentlərlə siniflərdən daha təbii işləyir. Propsların tipləşdirilməsi — funksiya arqumenti üçün interfeys. Qaytarılan dəyərin tipi — JSX.Element və ya ReactNode. useState tipi ilkin dəyərdən avtomatik çıxarı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>
  );

Müasir TypeScript diskriminant birlik tipləri ilə useReducer-i, xüsusi hooklarda Generics-ləri və React.PropsWithChildren vasitəsilə children-in ciddi yoxlanmasını tipləşdirməyə imkan verir. TypeScript ilə funksional komponentlər əlavə abstraksiyalar olmadan tam tip təhlükəsizliyi verir.

Tez-tez verilən suallar

Niyə React funksional komponentləri tövsiyə edir?

Funksional komponentlər daha sadədir: konstruktor, bind, this və səpələnmiş həyat dövrü metodları yoxdur. Hooklar əlaqəli məntiqi qruplaşdırmağa imkan verir. React resursları siniflərin deyil, hookların inkişafına yatırır. Server Components və yeni xüsusiyyətlər yalnız funksiyalarda əlçatandır.

Funksional komponentdə setInterval istifadə etmək olar?

Bəli, useEffect vasitəsilə timer içəridə və clearInterval üçün təmizləmə funksiyası ilə. Domkənara diqqət yetirin: əgər sayğac işlədirsinizsə, domkənardakı köhnə dəyərdən asılı olmamaq üçün setState-in funksional formasını istifadə edin: setCount(c => c + 1).

Funksional komponentdə əvvəlki props-ları necə əldə etmək olar?

Əvvəlki dəyəri saxlamaq üçün useRef istifadə edin. Hər renderdən sonra useEffect-də ref-i yeniləyin. Vizual müqayisə üçün usePrevious xüsusi hooku kömək edir: const prev = usePrevious(value);

React.memo useMemo-dan nə ilə fərqlənir?

React.memo — bütün komponentin memoizasiyası üçün HOC: props dəyişməyibsə, yenidən renderin qarşısını alır. useMemo — komponent daxilində konkret dəyərin memoizasiyası üçün hook: asılılıqlar massivi əsasında renderlər arasında funksiyanın nəticəsini keşləyir.

Funksional komponentdə getDerivedStateFromProps-u necə imitasiya etmək olar?

Ən sadə üsul — props-dan inisiallaşdırma ilə useState + sinxronizasiya üçün props-dan asılılığı olan useEffect. Nadir hallarda React tövsiyə edir: giriş məlumatları dəyişdikdə komponentin məcburi yenidən yaradılması üçün açar (key) istifadə edin.

Nəticə

  • Functional Component — müasir React standartı: props qəbul edən və JSX qaytaran funksiya.
  • Hooklar (useState, useEffect) funksional komponentlərə siniflər olmadan vəziyyət, effektlər və kontekst verir.
  • Kompozisiya children və xüsusi hooklar vasitəsilə mirası və HOC nümunələrini əvəz edir.
  • React.memo və useMemo funksional komponentlərin performans optimallaşdırmasını təmin edir.
  • TypeScript funksional komponentlərlə propsların ciddi tipləşdirilməsini və tiplərin avtomatik çıxarılmasını verir.
  • useEffect bir yerdə sinif komponentlərinin bütün həyat dövrü metodlarını əvəz edir.
  • Xüsusi hooklar HOC olmadan komponentlər arasında məntiqi çıxarmağa və təkrar istifadə etməyə imkan verir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun