React.Component — klass komponentlari va ularning ishlashi

Muallif: IT Sectr Nashr etilgan: 2026-07-04 O'qish vaqti: 9 daq

React.Component — React-da meros olish orqali komponentlar yaratish uchun asosiy klass. Hook-lar 16.8 versiyasida paydo bo'lishidan oldin, klass komponentlari holat va hayot siklini boshqarishning yagona usuli edi. React, 2024 ma'lumotlariga ko'ra, klass komponentlari hali ham qo'llab-quvvatlanadi, garchi hook-lari bo'lgan funksional komponentlar yangi loyihalar uchun tavsiya etilsa ham.

Asosiy fikrlar

  • React.Component — extends Component orqali klass komponentlari meros oladigan asosiy klass.
  • Holat this.state orqali boshqariladi va faqat this.setState orqali yangilanadi — to'g'ridan-to'g'ri mutatsiya taqiqlangan.
  • Hayot sikli componentDidMount, componentDidUpdate va componentWillUnmount metodlarini o'z ichiga oladi.
  • this klass metodlarida kontekst bog'lashni talab qiladi — bind, strelka funksiyalari yoki class fields orqali.
  • Migratsiya funksional komponentlarga bosqichma-bosqich mumkin: hook-lar va klasslar bir loyihada birgalikda mavjud bo'lishi mumkin.

React.Component nima?

React.Component — holat, proplar va komponentning hayot sikli bilan ishlash uchun o'rnatilgan metodlarni taqdim etuvchi abstrakt klass. Klass komponentini yaratish uchun React.Component dan meros oladigan klassni belgilash va render metodini amalga oshirish kerak.

React.Component React-ning birinchi versiyasida (2013) paydo bo'ldi va besh yil davomida komponentlar yaratishning asosiy usuli bo'lib qoldi. React ekotizimi klasslar atrofida qurildi: yuqori darajali komponentlar (HOC), render props, kontekst — barcha bu naqshlar klass sintaksisi orqali amalga oshirildi.

2019 yilda React 16.8 ning chiqarilishi bilan React jamoasi klasslarga alternativa sifatida hook-larni taqdim etdi. Hook-lar bir xil vazifalarni — holat, effektlar, kontekst — hal qilardi, lekin meros olish va murakkab kontekst bog'lashsiz. React.Component to'liq qo'llab-quvvatlanmoqda, ammo yangi loyihalar uchun funksional yondashuv tavsiya etiladi.

Klass komponentini yaratish

Minimal klass komponenti — React elementini qaytaradigan yagona render metodi bo'lgan klass. render — yagona majburiy metod. U this.props va this.state dan sof funksiya bo'lishi kerak: bir xil proplar va holat to'plami bir xil natijani beradi.

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

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

Konstruktor va holatni boshlang'ich qiymatlash

Konstruktor montajdan oldin bajariladi. Unda proplarni ota-ona klassiga uzatish uchun super(props) chaqiriladi va this.state boshlang'ich qiymatlanadi. Konstruktordan boshqa maqsadlarda — obunalar, API chaqiruvlari — foydalanish tavsiya etilmaydi: buning uchun componentDidMount mavjud.

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

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

this.state va this.setState orqali holatni boshqarish

this.state — komponent ma'lumotlarini o'z ichiga olgan obyekt. Uni to'g'ridan-to'g'ri o'zgartirish (this.state.count = 1) taqiqlangan — bu qayta renderlashni keltirib chiqarmaydi va bashorat qilishni buzadi. Holatni this.setState orqali yangilash kerak, u yangi holat obyektini yaratadi va qayta renderlashni ishga tushiradi.

setState obyekt yoki funksiyani qabul qilishi mumkin. Funksional shakl yangi holat oldingisiga bog'liq bo'lganda afzal: this.setState(prev => ({ count: prev.count + 1 })). React ishlab chiqarishni optimallashtirish uchun bir nechta setState-ni bitta batch-da guruhlashi mumkin.

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-ning muhim xususiyati — u asinxron. setState chaqirilgandan so'ng holat darhol yangilanmaydi. Yangilashdan keyin harakat qilish kerak bo'lsa, ikkinchi argument sifatida callback-ni uzating: this.setState(newState, () => console.log(this.state)).

Hayot sikli metodlari

Klass komponentlari React ma'lum momentlarda chaqiradigan oldindan belgilangan metodlarga ega. Montaj — constructor → render → componentDidMount. Yangilash — render → componentDidUpdate. Demontaj — componentWillUnmount.

MetodFazaVazifasi
constructorMontajState-ni boshlang'ich qiymatlash va metodlarni bog'lash
renderHar safarReact elementlarini qaytarish (majburiy)
componentDidMountMontajdan keyinAPI so'rovlari, obunalar, taymerlar
componentDidUpdateYangilashdan keyinProplar/holat o'zgarishiga reaksiya
componentWillUnmountO'chirishdan oldinObunalar, taymerlarni tozalash, hodisalardan chiqish

ComponentDidMount — ma'lumot so'rovi

componentDidMount — birinchi renderdan keyin nojo'ya ta'sirlar uchun asosiy joy. Bu yerda HTTP so'rovlari bajariladi, WebSocket ulanishlari o'rnatiladi va taymerlar ishga tushiriladi. Agar componentWillUnmount-da obunani tozalamasangiz, xotira sizib ketishi yuz beradi.

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

  componentWillUnmount() {
    // Montajda so'rovni bekor qilish
  }

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

Metodlarda this kontekstini bog'lash

JavaScript-da klass metodlari sukut bo'yicha instansiyaga bog'lanmagan. Agar metodni callback sifatida uzatsangiz — hodisa boshqaruvchisiga, taymerga — this undefined (strict rejimda) yoki window (strict rejimsiz) bo'ladi. Bog'lashsiz this.setState xato chiqaradi.

Bog'lashning uchta usuli bor: konstruktorda bind, callback-da strelka funksiyasi va strelka funksiyasi bilan class field. Birinchi usul — React-ning rasmiy tavsiyasi: bind bir marta konstruktorda, har bir renderda funksiyani qayta yaratmasdan.

js
// 1-usul: konstruktorda bind (tavsiya etiladi)
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 field — avtomatik bog'lash bilan zamonaviy sintaksis. Klass xususiyatidagi strelka funksiyasi this-ni konstruktorning ko'rinish doirasidan oladi. Kamchiligi — metod har bir instansiyada yaratiladi, prototipda emas, bu esa bir turdagi yuzlab komponentlar uchun xotirani oshiradi.

Klass va funksional komponentlarni taqqoslash

Klass va funksiya o'rtasidagi tanlov — faqat sintaksis masalasi emas. Hook-lari bo'lgan funksional komponentlar klasslarga xos muammolarni hal qiladi: turli hayot sikli metodlarida (componentDidMount + componentDidUpdate) mantiqning takrorlanishi, this bilan murakkablik va bog'liq mantiqni qayta ishlatiladigan blokga ajratib bo'lmasligi.

Funksional komponentlarni sinash osonroq — ular ichki holatga ega emas (hook-lardan oldin faqat klasslarda edi) va callback-larni tekshirish uchun DOM-da montaj talab qilmaydi. React barcha yangi loyihalar uchun funksional komponentlarni tavsiya qiladi, hujjatlar va misollar ular bilan yoziladi.

Klass komponentlari eski kod bilan ishlashda eng yaxshi tanlov bo'lib qoladi. Agar loyiha 2019 yildan oldin boshlangan bo'lsa, unda minglab klass komponentlari bo'lishi mumkin. Ularning hammasini bir sprintda hook-larga qayta yozish xavfli. React orqaga qarab moslikni kafolatlaydi: klass komponentlari olib tashlanmaydi.

Klasslardan hook-larga migratsiya strategiyasi

Bosqichma-bosqich migratsiya komponentni tahlil qilish bilan boshlanadi. Holatsiz sodda komponentlar (stateless) birinchi bo'lib o'tkaziladi — ular funksiyalar bilan bemalol almashtiriladi. Keyin — bir-ikki holat maydoni bo'lgan komponentlar, bunda useState to'g'ridan-to'g'ri this.state va this.setState ni almashtiradi.

Ko'p hayot sikli metodlari bo'lgan murakkab komponentlar useEffect orqali o'tkaziladi. componentDidMount + componentDidUpdate dan mantiq turli bog'liqliklar bilan alohida useEffect-larga bo'linadi. componentWillUnmount useEffect ichidagi qaytariladigan funksiya bilan almashtiriladi. Murakkab holat mantiqi uchun useReducer dan foydalaning.

Avtomatik migratsiya vositalari — @phenomnomnominal/ts-react-class-to-hook yoki codemod skriptlari — sodda klasslarni avtomatik konvertatsiya qilishi mumkin. Murakkab holatlarda migratsiya asl komponent mantiqini tushunishni talab qiladigan qo'l mehnati bo'lib qoladi.

Ko'p beriladigan savollar

Konstruktorda super(props) chaqiruvi majburiymi?

Ha. super(props) proplarni ota React.Component-ga uzatadi. Bu chaqiruvsiz this.props konstruktor ichida undefined bo'ladi. Render va hayot sikli metodlarida proplar super bo'lmasa ham mavjud, ammo bu amalga oshirishning nojo'ya ta'siri.

Nega setState asinxron?

React keraksiz qayta renderlar sonini kamaytirish uchun bir nechta setState chaqiruvlarini bir batch-da guruhlaydi. Agar setState sinxron bo'lganda, har bir chaqiruv darhol renderlashga olib kelar, ommaviy yangilanishlarda ishlab chiqarishni pasaytirardi.

Klass komponenti ichida hook-lardan foydalanish mumkinmi?

Yo'q. Hook-lar faqat funksional komponentlarda ishlaydi. Klass komponentlari bo'lgan loyihalar uchun barcha eski naqshlar mavjud: render props, HOC va kontekst uchun Consumer. Hook-larga migratsiya klassni funksiyaga aylantirishni talab qiladi.

PureComponent nima va u Component-dan nimasi bilan farq qiladi?

React.PureComponent proplar va holatning sayoz (shallow) taqqoslashi bilan shouldComponentUpdate-ni amalga oshiradi. Component-dan farqli o'laroq, har doim setState-da qayta renderlaydigan, PureComponent ma'lumotlar o'zgarmagan bo'lsa renderlashni o'tkazib yuboradi. Bu murakkab joylashmagan komponentlar uchun optimallashtirishdir.

Klass komponentida xatoni qanday boshqarish kerak?

componentDidCatch va getDerivedStateFromError dan foydalaning. componentDidCatch(error, info) xatoni qayd qiladi. getDerivedStateFromError fallback-UI ko'rsatish uchun state-ni yangilaydi. Bu metodlar faqat klass komponentlarida ishlaydi — funksiyalar ErrorBoundary o'rovchi komponentiga muhtoj.

Xulosa

  • React.Component — meros, holat va hayot sikli metodlari bo'lgan komponentlar uchun asosiy klass.
  • this.state konstruktorda boshlang'ich qiymatlanadi, faqat this.setState orqali yangilanadi — to'g'ridan-to'g'ri mutatsiya taqiqlangan.
  • componentDidMount — birinchi renderdan keyin API so'rovlari, obunalar va taymerlar uchun asosiy joy.
  • componentWillUnmount — xotira sizib ketishining oldini olish uchun obunalar va taymerlarni majburiy tozalash.
  • this-ni bog'lash majburiy: konstruktorda bind — callback metodlari uchun tavsiya etilgan usul.
  • Hook-lar yangi loyihalar uchun klass komponentlarini almashtirdi, ammo klasslar to'liq qo'llab-quvvatlanmoqda.
  • Migratsiya hook-larga bosqichma-bosqich amalga oshiriladi: avval stateless komponentlar, murakkablari — useReducer va useEffect orqali.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing