React میں فنکشنل کمپونینٹ — جدید ترقی کا معیار

مصنف: IT Sectr اشاعت: 2026-07-04 مطالعے کا وقت: 9 منٹ

Functional Component — عام JavaScript فنکشنز کا استعمال کرتے ہوئے React کمپونینٹ بنانے کا ایک طریقہ ہے، جو React 16.8 کی ریلیز اور ہکس کی آمد کے بعد معیار بن گیا۔ فنکشنل کمپونینٹ props قبول کرتے ہیں اور React.Component سے وراثت کی ضرورت کے بغیر React عناصر لوٹاتے ہیں۔ React، 2024 کے مطابق، React ایکو سسٹم میں 97% نئے کمپونینٹ فنکشنز کے طور پر لکھے جاتے ہیں۔

اہم نکات

  • Functional Component — ایک عام JavaScript فنکشن جو props قبول کرتا ہے اور JSX لوٹاتا ہے، extends Component کے بغیر۔
  • ہکس (useState, useEffect, useContext) فنکشنل کمپونینٹس کو اسٹیٹ اور لائف سائیکل تک مکمل رسائی دیتے ہیں۔
  • پڑھنے کی اہلیت — فنکشنل کمپونینٹ کلاس کمپونینٹ سے چھوٹے ہوتے ہیں، بغیر کنسٹرکٹر، bind اور اضافی لائف سائیکل طریقوں کے۔
  • کارکردگی — React میموئیزیشن اور سست ابتدا کے ذریعے فنکشنل کمپونینٹ کو بہتر بناتا ہے۔
  • React تجویز — تمام نئے پروجیکٹس کو صرف ہکس کے ساتھ فنکشنل کمپونینٹ استعمال کرنے چاہئیں۔

Functional Component کیا ہے؟

Functional Component ایک React کمپونینٹ ہے جو ایک فنکشن کے طور پر بیان کیا گیا ہے، جو ایک props آبجیکٹ قبول کرتا ہے اور ایک React عنصر لوٹاتا ہے۔ React 16.8 سے پہلے، ایسے کمپونینٹ کو اسٹیٹ لیس کہا جاتا تھا کیونکہ وہ اندرونی اسٹیٹ کا نظم نہیں کر سکتے تھے۔

React 16.8 (فروری 2019) میں ہکس کی آمد کے ساتھ، فنکشنل کمپونینٹ کو اسٹیٹ (useState)، ضمنی اثرات (useEffect)، سیاق و سباق (useContext) اور ریف (useRef) تک رسائی مل گئی۔ ‘اسٹیٹ لیس’ کی اصطلاح متروک ہو گئی ہے — جدید فنکشنل کمپونینٹ اسٹیٹ کو مکمل طور پر منظم کرتے ہیں۔

React سرکاری طور پر فنکشنل کمپونینٹ کو کمپونینٹ بنانے کا بنیادی طریقہ تجویز کرتا ہے۔ react.dev پر تمام دستاویزات، مثالیں، ٹیوٹوریلز اور نئے APIs (Server Components, Actions) فنکشنل نقطہ نظر پر بنائے گئے ہیں۔ کلاس کمپونینٹ کو ہٹایا نہیں گیا ہے، لیکن React کی نئی خصوصیات صرف ہکس کے ذریعے دستیاب ہیں۔

فنکشنل کمپونینٹ بنانا

سب سے آسان فنکشنل کمپونینٹ ایک فنکشن ہے جو JSX لوٹاتا ہے۔ یہ props کو دلیل کے طور پر قبول کرتا ہے، کنسٹرکٹر، super کال یا this بائنڈنگ کی ضرورت نہیں ہوتی۔ Props براہ راست فنکشن دلیل کے ذریعے قابل رسائی ہیں — کوئی this.props نہیں۔

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

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

اسٹیٹ والا کمپونینٹ

اسٹیٹ شامل کرنے کے لیے useState استعمال کریں۔ ہکس دو قدروں کا ایک ٹیپل لوٹاتا ہے: موجودہ اسٹیٹ اور ایک سیٹر فنکشن۔ کلاس پر مبنی this.setState کے برعکس، useState قدر کو پچھلے کے ساتھ ضم کرنے کے بجائے مکمل طور پر بدل دیتا ہے۔

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

فنکشنل کمپونینٹ میں ہکس

ہکس جدید React کی بنیاد ہیں۔ ہر ہکس ایک مخصوص کام حل کرتا ہے: useState — اسٹیٹ، useEffect — ضمنی اثرات، useContext — سیاق و سباق تک رسائی، useRef — DOM عناصر کے حوالہ جات، useCallback اور useMemo — میموئیزیشن۔

ضمنی اثرات کے لیے useEffect

useEffect ایک ساتھ componentDidMount، componentDidUpdate اور componentWillUnmount کو بدل دیتا ہے۔ پہلی دلیل اثر کے ساتھ کال بیک ہے، دوسری انحصار کی صف ہے۔ اگر صف خالی ہے تو اثر ماؤنٹنگ کے بعد ایک بار چلتا ہے۔ اگر انحصار متعین کیا گیا ہے تو ان میں سے کسی کے تبدیل ہونے پر چلتا ہے۔

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

کسٹم ہکس

فنکشنل کمپونینٹ کا بنیادی فائدہ کسٹم ہکس کے ذریعے منطق کا دوبارہ استعمال ہے۔ جہاں کلاس کمپونینٹ میں منطق componentDidMount اور componentDidUpdate کے درمیان ڈپلیکیٹ ہوتی تھی، وہیں فنکشنل کمپونینٹ میں اسے use سابقہ کے ساتھ علیحدہ فنکشن میں نکالا جاتا ہے۔ کسٹم ہکس HOC اور render props کا بنیادی متبادل ہیں۔

وراثت کے بجائے ترکیب

React کمپونینٹ کے درمیان کوڈ کے دوبارہ استعمال کے لیے وراثت کے بجائے ترکیب تجویز کرتا ہے۔ فنکشنل کمپونینٹ ترکیب کے لیے مثالی ہیں: ایک کمپونینٹ میں کئی دوسرے کمپونینٹ شامل ہو سکتے ہیں، انہیں props اور children پاس کرتے ہوئے۔

Children پیٹرن — جب کمپونینٹ children prop کے ذریعے چائلڈ عناصر وصول کرتا ہے — قدرتی طور پر لاگو ہوتا ہے: function Layout({ children })۔ Vue کے سلاٹس کا مشابہ نامزد کمپونینٹ props کے ذریعے لاگو ہوتا ہے: function Page({ header, sidebar, content })۔

React میں وراثت شاذ و نادر ہی استعمال ہوتی ہے۔ یہاں تک کہ کلاس کمپونینٹ، جو تکنیکی طور پر extends کو سپورٹ کرتے ہیں، شاذ و نادر ہی ایک سطح سے گہری درجہ بندی بناتے ہیں۔ ترکیب کے ساتھ فنکشنل کمپونینٹ وراثت کے بغیر کوڈ کے دوبارہ استعمال کی ضروریات کو پوری طرح پورا کرتے ہیں۔

کارکردگی کی اصلاح

فنکشنل کمپونینٹ بلٹ ان آپٹیمائزیشن میکانزم کے ساتھ آتے ہیں۔ React.memo — فنکشنز کے لیے PureComponent کا ہم معنی: اگر props تبدیل نہیں ہوئے تو دوبارہ رینڈرنگ روکتا ہے (سطحی موازنہ)۔ useMemo رینڈرز کے درمیان حساب کے نتائج کو کیش کرتا ہے۔

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 کال بیک فنکشنز کو میموئیز کرتا ہے تاکہ وہ ہر رینڈر پر دوبارہ نہ بنیں۔ یہ React.memo میں لپٹے چائلڈ کمپونینٹ کو فنکشن پاس کرتے وقت اہم ہے: useCallback کے بغیر، چائلڈ کمپونینٹ ہر بار دوبارہ رینڈر ہوگا کیونکہ فنکشن ریفرنس بدل جاتا ہے۔

فنکشنل بمقابلہ کلاس کمپونینٹ

طریقوں کے درمیان فرق نحو سے باہر ہے۔ فنکشنل کمپونینٹ closure ہیں: اسٹیٹ اور اثرات ایک مخصوص رینڈر سے منسلک ہوتے ہیں۔ کلاس کمپونینٹ this استعمال کرتے ہیں: اسٹیٹ ہمیشہ this.state سے لیا جاتا ہے، جو کہ جب غیر متزامن کال بیک عمل میں آتا ہے تو پرانا ہو سکتا ہے۔

پہلوفنکشنلکلاس
اسٹیٹuseState (الگ تھلگ)this.state + this.setState
اثراتانحصار کے ساتھ useEffectcomponentDidMount + componentDidUpdate
سیاق و سباقuseContextContext.Consumer یا static contextType
اصلاحReact.memo + useMemoPureComponent + shouldComponentUpdate
منطق کا دوبارہ استعمالکسٹم ہکسHOC / Render props
thisکوئی نہیںکنسٹرکٹر میں bind

فنکشنل کمپونینٹ ایک لکیری عمل درآمد کا بہاؤ فراہم کرتے ہیں۔ کلاس کمپونینٹ میں، متعلقہ منطق اکثر متعدد لائف سائیکل طریقوں میں بکھری ہوتی ہے۔ مثال کے طور پر، WebSocket سبسکرپشن componentDidMount میں مرتب کی جاتی ہے اور componentWillUnmount میں ہٹا دی جاتی ہے۔ فنکشنل کمپونینٹ میں، دونوں آپریشنز واپسی کی صفائی کے فنکشن کے ساتھ ایک ہی useEffect میں ہوتے ہیں۔

TypeScript اور فنکشنل کمپونینٹ

TypeScript کلاسوں کے مقابلے میں فنکشنل کمپونینٹ کے ساتھ زیادہ قدرتی طور پر کام کرتا ہے۔ Props ٹائپنگ — فنکشن دلیل کے لیے ایک انٹرفیس۔ واپسی کی قسم JSX.Element یا ReactNode ہے۔ useState ابتدائی قیمت سے خود بخود قسم کا اندازہ لگاتا ہے۔

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

جدید TypeScript امتیازی یونین اقسام کے ساتھ useReducer ٹائپ کرنے، کسٹم ہکس میں جنریکس، اور React.PropsWithChildren کے ذریعے سخت چائلڈ توثیق کی اجازت دیتا ہے۔ TypeScript کے ساتھ فنکشنل کمپونینٹ اضافی تجرید کے بغیر مکمل قسم کی حفاظت فراہم کرتے ہیں۔

اکثر پوچھے گئے سوالات

React فنکشنل کمپونینٹ کیوں تجویز کرتا ہے؟

فنکشنل کمپونینٹ آسان ہیں: کوئی کنسٹرکٹر، bind، this یا بکھرے ہوئے لائف سائیکل طریقے نہیں۔ ہکس متعلقہ منطق کو گروپ کرنے کی اجازت دیتے ہیں۔ React کلاسوں کی بجائے ہکس کی ترقی میں وسائل لگاتا ہے۔ Server Components اور نئی خصوصیات صرف فنکشنز میں دستیاب ہیں۔

کیا میں فنکشنل کمپونینٹ میں setInterval استعمال کر سکتا ہوں؟

ہاں، useEffect کے ذریعے اندر ٹائمر اور clearInterval کے لیے صفائی کے فنکشن کے ساتھ۔ closure پر توجہ دیں: اگر آپ کاؤنٹر بڑھا رہے ہیں تو setState کی فنکشنل شکل استعمال کریں: setCount(c => c + 1) تاکہ closure میں پرانی قیمت پر انحصار نہ کرنا پڑے۔

فنکشنل کمپونینٹ میں پچھلے props کیسے حاصل کروں؟

پچھلی قیمت ذخیرہ کرنے کے لیے useRef استعمال کریں۔ ہر رینڈر کے بعد useEffect میں ref کو اپ ڈیٹ کریں۔ کسٹم ہکس usePrevious صاف موازنہ میں مدد کرتا ہے: const prev = usePrevious(value);

React.memo اور useMemo میں کیا فرق ہے؟

React.memo پورے کمپونینٹ کو میموئیز کرنے کے لیے ایک HOC ہے: اگر props تبدیل نہیں ہوئے تو دوبارہ رینڈرنگ روکتا ہے۔ useMemo کمپونینٹ کے اندر کسی مخصوص قیمت کو میموئیز کرنے کے لیے ایک ہکس ہے: انحصار کی صف کے مطابق رینڈرز کے درمیان فنکشن کے نتیجے کو کیش کرتا ہے۔

فنکشنل کمپونینٹ میں getDerivedStateFromProps کیسے نقل کروں؟

سب سے آسان طریقہ props سے ابتدا کے ساتھ useState + مطابقت پذیری کے لیے props پر انحصار کے ساتھ useEffect ہے۔ نایاب صورتوں میں، React ان پٹ ڈیٹا تبدیل ہونے پر کمپونینٹ کو دوبارہ بنانے پر مجبور کرنے کے لیے key استعمال کرنے کی تجویز کرتا ہے۔

خلاصہ

  • Functional Component — جدید React معیار: ایک فنکشن جو props قبول کرتا ہے اور JSX لوٹاتا ہے۔
  • ہکس (useState, useEffect) فنکشنل کمپونینٹ کو کلاس کے بغیر اسٹیٹ، اثرات اور سیاق و سباق دیتے ہیں۔
  • ترکیب children اور کسٹم ہکس کے ذریعے وراثت اور HOC پیٹرن کو بدل دیتی ہے۔
  • React.memo اور useMemo فنکشنل کمپونینٹ کے لیے کارکردگی کی اصلاح فراہم کرتے ہیں۔
  • TypeScript فنکشنل کمپونینٹ کے ساتھ سخت props ٹائپنگ اور خودکار قسم کا اندازہ فراہم کرتا ہے۔
  • useEffect کلاس کمپونینٹ کے تمام لائف سائیکل طریقوں کو ایک جگہ بدل دیتا ہے۔
  • کسٹم ہکس HOC کے بغیر کمپونینٹ کے درمیان منطق نکالنے اور دوبارہ استعمال کرنے کی اجازت دیتے ہیں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں