1-bo‘lim
React bilan tanishuv
React ni kim va nima uchun yaratgan, nomi qayerdan kelgan, buyruqli va tavsifiy yondashuv farqi hamda virtual DOM nima.
Ushbu bo‘lim mundarijasi
React - foydalanuvchi interfeysini qurish uchun kutubxona. Uning asosiy g'oyasi: interfeys komponentlardan yig'iladi, va har bir komponent "hozirgi holatda men qanday ko'rinishim kerak" degan savolga javob beradi.
Bu darslik siz JavaScript ni bilasiz deb hisoblaydi. Agar hali o'rganmagan bo'lsangiz, avval JavaScript asoslari darsligidan boshlang.
Muammo: DOM ni qo'lda yangilash #
Faraz qiling, sahifada hisoblagich bor. Toza JavaScript da u shunday yoziladi:
let soni = 0;
const tugma = document.querySelector("#tugma");
const matn = document.querySelector("#matn");
tugma.addEventListener("click", () => {
soni = soni + 1;
matn.textContent = `Bosildi: ${soni}`;
});
Ikki narsani alohida yuritish kerak: holat (soni) va uni
ekranda ko'rsatish (matn.textContent).
Kichik sahifada bu muammo emas. Lekin o'nlab element bir xil ma'lumotga bog'liq bo'lsa, ularning har birini qo'lda yangilash kerak - va bittasini unutish oson.
React ning javobi #
import { renderToStaticMarkup } from "react-dom/server";
function Hisoblagich({ soni }) {
return <button>Bosildi: {soni}</button>;
}
console.log(renderToStaticMarkup(<Hisoblagich soni={0} />));
console.log(renderToStaticMarkup(<Hisoblagich soni={7} />));
<button>Bosildi: 0</button>
<button>Bosildi: 7</button>
Komponent - bu oddiy funksiya. U ma'lumot oladi va interfeys qanday ko'rinishi kerakligini qaytaradi.
E'tibor bering: textContent ham, querySelector ham yo'q. Siz
nima ko'rinishi kerakligini aytasiz, React esa DOM ni qanday
o'zgartirishni o'zi hal qiladi.
Ikki yondashuvning farqi shu:
Buyruqli (imperative) - "bor, o'sha elementni top, uning matnini o'zgartir". Siz qadamlarni aytasiz.
Tavsifiy (declarative) - "soni 7 bo'lganda tugmada
Bosildi: 7 yozilsin". Siz natijani aytasiz.
Kundalik misol: taksi haydovchisiga "chapga bur, keyin to'g'ri, keyin o'ngga" deyish - buyruqli. "Meni Navoiy ko'chasiga olib boring" - tavsifiy.
React tavsifiy: siz har bir holat uchun interfeys qanday ko'rinishini tasvirlaysiz, u esa farqni topib, DOM ni o'zgartiradi.
JSX #
Yuqoridagi kodda g'alati narsa bor: JavaScript ichida HTML.
import { renderToStaticMarkup } from "react-dom/server";
const ism = "Malika";
const ball = 88;
const element = (
<div className="kart">
<h3>{ism}</h3>
<p>Ball: {ball}</p>
<p>{ball >= 60 ? "o'tdi" : "o'tmadi"}</p>
</div>
);
console.log(renderToStaticMarkup(element));
<div class="kart"><h3>Malika</h3><p>Ball: 88</p><p>o'tdi</p></div>
Bu JSX - JavaScript ning kengaytmasi. Jingalak qavs ichida istalgan JavaScript ifodasi yozilishi mumkin.
Ikki narsaga e'tibor bering:
classemas,classNameyozilgan.- Apostrof
'bo'lib chiqdi - React hamma matnni avtomatik ekranlaydi.
Ikkalasini ham keyingi bo'limlarda batafsil ko'ramiz.
Chiqishdagi ' tasodif emas. React JSX ichiga qo'yilgan har
qanday matnni xavfsiz qilib chiqaradi.
Demak foydalanuvchi izoh sifatida <script> yozsa ham, u kod
bo'lib ishlamaydi - oddiy matn bo'lib ko'rinadi. Node.js
darsligining 18-bo'limida qo'lda yozgan himoyamiz bu yerda
odatiy holat.
Bu React ning eng yaxshi qarorlaridan biri: xavfsizlik qo'shimcha ish emas, balki odatiy xatti-harakat.
Nomi qayerdan kelgan #
Nom to'g'ridan-to'g'ri ma'noni bildiradi: kutubxona holat o'zgarishiga javob qaytaradi (react qiladi).
Siz soni ni o'zgartirasiz - React o'sha zahoti interfeysni
moslaydi. Hech narsani qo'lda yangilash kerak emas.
Jordan Uolkning dastlabki namunasi boshqacha atalgan edi - FaxJS. Ochiq kodga chiqarilganda esa unga hozirgi nom berildi.
Uni kim yaratgan #
Jordan Uolk
React ning yaratuvchisi. Amerikalik dasturchi, o'sha paytda `Facebook` da ishlagan.
G'oya kutilmagan joydan kelgan: Facebook da `XHP` degan vosita bor edi - u PHP ichida HTML komponentlarini yozish imkonini berardi. Uolk o'sha fikrni JavaScript ga ko'chirishga urindi.
Natija avval Facebook lentasida (2011), keyin Instagram da (2012) ishlatildi. 2013-yilda esa kutubxona ochiq kodga chiqarildi.
React 2013-yilda taqdim etilganda, javob salbiy bo'ldi.
Sabab - JSX. O'sha davrda "mazmun, ko'rinish va mantiq alohida fayllarda bo'lsin" degan qoida muqaddas hisoblanardi. JavaScript ichiga HTML yozish esa bu qoidaning ochiq buzilishi edi.
React jamoasining javobi shunday bo'ldi: biz texnologiyalarni emas, vazifalarni ajratamiz. Bitta tugmaning ko'rinishi ham, mantig'i ham bitta narsaga tegishli - demak ular birga tursin.
Bir necha yil o'tib bu fikr g'olib chiqdi. Bugun Vue, Svelte
va boshqa deyarli hamma vosita shu yondashuvga amal qiladi.
Vaqt chizig'i #
React tarixidagi eng katta o'zgarish - ilgaklar (hooks).
Undan oldin holat saqlash uchun komponentni sinf qilib yozish
kerak edi: class Hisoblagich extends React.Component,
this.state, this.setState, constructor va bind.
Ilgaklar bularning hammasini bitta qatorga qisqartirdi:
const [soni, ozgartir] = useState(0);
Bugun yangi kod deyarli faqat funksiyalar bilan yoziladi. Sinfli komponentlar hali ishlaydi, lekin ularni faqat eski loyihalarda uchratasiz.
Internetdagi qo'llanma this.state bilan boshlansa, u 2019-yilga
qadar yozilgan - ehtiyot bo'ling.
Virtual DOM #
import { renderToStaticMarkup } from "react-dom/server";
function Royxat({ shaharlar }) {
return (
<ul>
{shaharlar.map((shahar) => (
<li key={shahar}>{shahar}</li>
))}
</ul>
);
}
const oldin = ["Namangan", "Andijon"];
const keyin = ["Namangan", "Andijon", "Buxoro"];
console.log(renderToStaticMarkup(<Royxat shaharlar={oldin} />));
console.log(renderToStaticMarkup(<Royxat shaharlar={keyin} />));
<ul><li>Namangan</li><li>Andijon</li></ul>
<ul><li>Namangan</li><li>Andijon</li><li>Buxoro</li></ul>
Ro'yxat o'zgarganda React butun <ul> ni qaytadan yasamaydi. U
farqni topadi va faqat bitta yangi <li> qo'shadi.
React interfeysning yengil nusxasini xotirada saqlaydi - bu oddiy JavaScript obyektlari. Holat o'zgarganda u yangi nusxani yasab, eskisi bilan solishtiradi va faqat farqni haqiqiy DOM ga qo'llaydi.
Nega bu muhim: haqiqiy DOM ni o'zgartirish qimmat amal. Oddiy obyektlarni solishtirish esa arzon.
Lekin bir noto'g'ri tushuncha bor: virtual DOM React ni qo'lda yozilgan kodadan tezroq qilmaydi. Mukammal yozilgan buyruqli kod har doim tezroq bo'ladi.
Virtual DOM ning maqsadi - tezlik emas, soddalik: siz DOM haqida umuman o'ylamaysiz, lekin unumdorlik baribir qoniqarli qoladi.
React qayerda ishlatiladi #
| Qayerda | Izoh |
|---|---|
| Veb ilovalar | Asosiy vazifasi |
| Mobil ilovalar | React Native orqali |
| Ish stoli ilovalari | Electron bilan |
| Statik saytlar | Next.js, Astro |
React - kutubxona, freymvork emas. U faqat interfeys bilan shug'ullanadi: marshrutlash, ma'lumot olish va boshqa narsalar uchun alohida vositalar qo'shiladi.
Bu erkinlik ham, qiyinchilik ham: tanlash sizning zimmangizda.
Komponentlar birlashadi #
import { renderToStaticMarkup } from "react-dom/server";
function Nishon({ matn }) {
return <b>{matn}</b>;
}
function TalabaQatori({ ism, ball }) {
return (
<li>
{ism} <Nishon matn={ball >= 90 ? "alo" : "yaxshi"} />
</li>
);
}
function Guruh({ talabalar }) {
return (
<ul>
{talabalar.map((t) => (
<TalabaQatori key={t.ism} ism={t.ism} ball={t.ball} />
))}
</ul>
);
}
const guruh = [
{ ism: "Malika", ball: 88 },
{ ism: "Husanboy", ball: 92 },
];
console.log(renderToStaticMarkup(<Guruh talabalar={guruh} />));
<ul><li>Malika <b>yaxshi</b></li><li>Husanboy <b>alo</b></li></ul>
Uchta kichik komponent bir-birining ichiga joylashdi. Aynan shu React ning asosiy kuchi: murakkab interfeys kichik, tushunarli bo'laklardan yig'iladi.
Har bir komponentni alohida o'qish, sinash va qayta ishlatish mumkin.
- Toza JavaScript da hisoblagich yozib, DOM ni qo'lda yangilang.
- Buyruqli va tavsifiy yondashuv farqini o'z so'zingizda ayting.
- Ism va ballni ko'rsatadigan komponent yozing.
- JSX ichida jingalak qavs bilan ifoda qo'ying.
classo'rnigaclassNameyozilishiga e'tibor bering.- Matn ichiga
<b>salom</b>qo'yib, u ekranlanishini ko'ring. - Bitta komponentni ikkinchisining ichiga joylang.
mapbilan ro'yxat chizing.- React nomi qayerdan kelganini eslab qoling.
- Ilgaklar qachon qo'shilganini bilib oling.
Xulosa #
- React interfeysni komponentlardan yig'adi; komponent - oddiy funksiya.
- Yondashuv tavsifiy: siz natijani tasvirlaysiz, DOM ni React o'zgartiradi.
- JSX - JavaScript ichidagi belgilash tili; jingalak qavsda istalgan ifoda yoziladi.
- React matnni avtomatik ekranlaydi - XSS dan odatiy himoya.
- Uni Jordan Uolk yaratgan; 2011-yilda Facebook lentasida ishlatilgan, 2013-yilda ochiq kodga chiqarilgan.
- Boshida JSX tufayli keskin tanqid qilingan; bugun bu yondashuv me'yorga aylangan.
- 2019-yilgi ilgaklar sinfli komponentlarni almashtirdi - eski qo'llanmalarga ehtiyot bo'ling.
- Virtual DOM tezlik uchun emas, soddalik uchun.
Keyingi bo'limda muhitni sozlab, birinchi loyihani yaratamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.