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.

🕑 11 daqiqa o‘qish 📄 969 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Muammo: DOM ni qo'lda yangilash
  2. React ning javobi
  3. JSX
  4. Nomi qayerdan kelgan
  5. Uni kim yaratgan
  6. Vaqt chizig'i
  7. Virtual DOM
  8. React qayerda ishlatiladi
  9. Komponentlar birlashadi
  10. Xulosa

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:

JavaScript
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 #

JSX
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} />));
Natija
<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.

Buyruqli va tavsifiy

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.

JSX
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));
Natija
<div class="kart"><h3>Malika</h3><p>Ball: 88</p><p>o&#x27;tdi</p></div>

Bu JSX - JavaScript ning kengaytmasi. Jingalak qavs ichida istalgan JavaScript ifodasi yozilishi mumkin.

Ikki narsaga e'tibor bering:

  1. class emas, className yozilgan.
  2. Apostrof &#x27; bo'lib chiqdi - React hamma matnni avtomatik ekranlaydi.

Ikkalasini ham keyingi bo'limlarda batafsil ko'ramiz.

React avtomatik ekranlaydi

Chiqishdagi &#x27; 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 #

Nega "React"

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.

Boshida uni deyarli hech kim yoqtirmadi

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 ning rivojlanishi 2011 Facebook lentasida 2013 Ochiq kod JSConf US 2015 React Native mobil ilovalar 2019 Ilgaklar eng katta o'zgarish 2024 React 19 bu darslikda 2019-yilgacha komponentlar sinf sifatida yozilardi; ilgaklar ularni oddiy funksiyaga aylantirdi
2019-yilgi burilish

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:

JSX
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 #

JSX
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} />));
Natija
<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.

Virtual DOM nima va nima emas

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 #

QayerdaIzoh
Veb ilovalarAsosiy vazifasi
Mobil ilovalarReact Native orqali
Ish stoli ilovalariElectron bilan
Statik saytlarNext.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 #

JSX
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} />));
Natija
<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.

Amaliy topshiriq
  1. Toza JavaScript da hisoblagich yozib, DOM ni qo'lda yangilang.
  2. Buyruqli va tavsifiy yondashuv farqini o'z so'zingizda ayting.
  3. Ism va ballni ko'rsatadigan komponent yozing.
  4. JSX ichida jingalak qavs bilan ifoda qo'ying.
  5. class o'rniga className yozilishiga e'tibor bering.
  6. Matn ichiga <b>salom</b> qo'yib, u ekranlanishini ko'ring.
  7. Bitta komponentni ikkinchisining ichiga joylang.
  8. map bilan ro'yxat chizing.
  9. React nomi qayerdan kelganini eslab qoling.
  10. 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.

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.