ReactJS

**React** (baʼzan **React.js** yoki **ReactJS**) foydalanuvchi interfeyslarini ishlab chiqish uchun ochiq manbali JavaScript kutubxonasi.

React Facebook, Instagram va individual ishlab chiquvchilar va korporatsiyalar hamjamiyati tomonidan ishlab chiqilgan va qoʻllab-quvvatlanadi.

React-dan bir sahifali saytlar va mobil ilovalarni ishlab chiqish uchun foydalanish mumkin. Uning maqsadi yuqori ishlash tezligi, soddaligi va keng imkoniyatga ega ekanligidir. Foydalanuvchi interfeyslarini ishlab chiqish uchun kutubxona sifatida React koʻpincha MobX, Redux va GraphQL kabi boshqa kutubxonalar bilan birga ishlatiladi.

## Rivojlanish tarixi
React Facebookda dasturiy taʼminot ishlab chiqaruvchisi Jordan Valke tomonidan yaratilgan. Bunga PHP uchun komponentga asoslangan HTML fremvorki boʻlgan XHP taʼsir koʻrsatdi. React birinchi marta 2011-yilda Facebook yangiliklarida, keyinroq 2012-yilda Instagramda ishlatilgan. React manbasi 2013-yil may oyida „JSConf US“ konferensiyasida ochilgan.

React Native 2015-yil fevral oyida Facebookning „React.js Conf“da eʼlon qilingan va 2015-yil mart oyida ochiq manba hisoblanadi . Bu sizga React yordamida Android, iOS va UWP ilovalarini ishlab chiqish imkonini beradi.

2017-yil 18-aprelda Facebook React ning qayta yozilgan va optimallashtirilgan versiyasi boʻlgan React Fiber eʼlon qilindi. React Fiber kelajakdagi barcha xususiyatlar va yaxshilanishlarni ishlab chiqish uchun asos boʻl.

## Foydalanish misoli
Quyida JSX va JavaScript bilan HTMLda Reactdan foydalanishga misol keltirilgan. 
```html
<div id="myReactApp"></div>

<script type="text/babel">
  class Greeter extends React.Component { 
    render() { 
      return <h1>{this.props.greeting}</h1>
    } 
  } 

  ReactDOM.render(<Greeter greeting="Hello World!" />, document.getElementById('myReactApp'));
</script>
```
`Greeter` klassi `greeting` xususiyatini qabul qiluvchi React komponentidir. `ReactDOM.render` usuli `greeting` xususiyati `"Hello World"` ga oʻrnatilgan `Greeter` sinfining (komponenti) namunasini koʻrsatadi va koʻrsatilgan komponentni `myReactApp` identifikatori bilan DOM elementiga ichki element sifatida kiritadi.

Veb-brauzerda koʻrsatilganda, natija quyidagicha boʻladi:
```html
<div id="myReactApp">
    <h1>Hello World!</h1>
</div>
```


## Xususiyatlari

### Bir tomonlama maʼlumotlarni uzatish
Xususiyatlar asosiy komponentlardan kichik komponentlarga uzatiladi. Komponentlar oʻzgarmas xususiyatlar toʻplami sifatida qabul qilinadi () qiymatlari, shuning uchun komponent xususiyatlarni bevosita oʻzgartira olmaydi, lekin qayta qoʻngʻiroq qilish funktsiyalari(callback function) orqali oʻzgarishlarg a olib kelishi mumkin. Ushbu mexanizm „xususiyatlar pastga, hodisalar yuqoriga“ deb ataladi.

### Virtual DOM
React virtual DOM dan foydalanadi (). React DOM brauzerini optimal yangilash uchun interfeysning oldingi va joriy holati oʻrtasidagi farqni hisoblash imkonini beruvchi xotiradagi kesh strukturasini yaratadi. Shunday qilib, dasturchi butun sahifa yangilangan deb hisoblab, sahifa bilan ishlashi mumkin, lekin kutubxona sahifaning qaysi komponentlarini yangilash kerakligini mustaqil ravishda hal qiladi.

### Redux
React koʻpincha komponent holatlarini boshqarish uchun **Redux** bilan birgalikda ishlatiladi.

### JSX
JavaScript XML (JSX) JavaScript sintaksisining kengaytmasi boʻlib, interfeys tuzilishini tavsiflash uchun HTML-ga oʻxshash sintaksisdan foydalanish imkonini beradi. Odatda, komponentlar JSX yordamida yoziladi, lekin oddiy JavaScript dan foydalanish ham mumkin. JSX PHP, XHP kengaytirish uchun Facebook tomonidan yaratilgan boshqa tilni .

### Qoʻllash usullari
Hayotiy tsikl usullari ishlab chiquvchiga komponentning hayot aylanishining turli bosqichlarida kodni ishga tushirish imkonini beradi. Masalan:

* `shouldComponentUpdate` – agar qayta chizish kerak boʻlmasa, `false` qaytarish orqali komponentni qayta chizilishining oldini olishga imkon beradi.
* `componentDidMount` – komponentni birinchi renderlashdan keyin chaqiriladi. Koʻpincha API orqali masofaviy manbadan maʼlumotlarni olish uchun ishlatiladi.
* `componentWillUnmount` – Komponent oʻchirilganda chaqiriladi. Koʻpincha monitoring voqealariga obunani bekor qilish uchun ishlatiladi.
* `render` – bu hayot aylanishining eng muhim usuli. Har bir komponentda ushbu usul boʻlishi kerak. Odatda interfeysdagi maʼlumotlarni qayta chizish uchun komponent maʼlumotlari oʻzgarganda chaqiriladi.

### Brauzerda faqat HTML renderlashdan koʻproq
React brauzerda HTMLni koʻrsatishdan koʻproq narsa uchun ishlatiladi. Masalan, Facebookda `<canvas>` tegida koʻrsatilgan dinamik grafikalar mavjud. Netflix va PayPal server va mijozda bir xil HTMLni koʻrsatish uchun izomorf yuklamalardan foydalanadi.

## Manbalar