React ReactDOM'ning kuchli DOM rendering yordamchi dasturlarini o'rganing. Dinamik foydalanuvchi interfeyslarini yaratish uchun ReactDOM.render, hydrate, unmountComponentAtNode va findDOMNode haqida bilib oling.
React ReactDOM: DOM Rendering Yordamchi Dasturlari Bo'yicha To'liq Qo'llanma
React — bu foydalanuvchi interfeyslarini yaratish uchun mo'ljallangan kuchli JavaScript kutubxonasi. Asosida, React Hujjat Ob'ekt Modeli (DOM) bilan bevosita ishlashdan xalos qiladi, bu esa dasturchilarga o'z UI'larining kerakli holatini tasvirlashga e'tibor qaratish imkonini beradi. Biroq, bu UI tasvirlarini hayotga tatbiq etish uchun React'ning o'zi brauzer DOM'i bilan o'zaro aloqa qilish usuliga muhtoj. Aynan shu yerda ReactDOM yordamga keladi. Ushbu paket React komponentlarini DOM'ga render qilish va ularning o'zaro ta'sirini boshqarish uchun maxsus metodlarni taqdim etadi.
ReactDOM'ning Rolini Tushunish
ReactDOM React'ning komponentlarga asoslangan dunyosi va brauzer DOM'i o'rtasidagi ko'prik vazifasini bajaradi. U React komponentlarini ma'lum DOM tugunlariga render qilish, ularning ma'lumotlari o'zgarganda yangilash va hatto kerak bo'lmay qolganda olib tashlash kabi funksiyalarni taklif etadi. Uni brauzerda React ilovangizning vizual tasvirini boshqaradigan dvigatel deb o'ylang.
React va ReactDOM'ni farqlash muhimdir. React — bu komponentlar yaratish va holatni boshqarish uchun asosiy kutubxona. ReactDOM esa o'sha komponentlarni olib, brauzer DOM'iga render qilish uchun mas'uldir. React boshqa muhitlarda ham ishlatilishi mumkin bo'lsa-da (masalan, mobil ilovalar uchun React Native, u boshqa render kutubxonasidan foydalanadi), ReactDOM aynan veb-ilovalar uchun mo'ljallangan.
Asosiy ReactDOM Metodlari
Keling, ReactDOM paketi tomonidan taqdim etilgan eng muhim metodlardan ba'zilarini ko'rib chiqaylik:
ReactDOM.render()
ReactDOM.render()
metodi har qanday React ilovasining asosidir. U React komponentini (yoki komponentlar daraxtini) belgilangan DOM tuguniga o'rnatish uchun mas'uldir. Bu tugun odatda sahifangizdagi bo'sh HTML elementi bo'ladi.
Sintaksis:
ReactDOM.render(element, container[, callback])
element
: Siz render qilmoqchi bo'lgan React elementi. Bu odatda ilovangizning yuqori darajadagi komponenti bo'ladi.container
: Komponentni o'rnatmoqchi bo'lgan DOM elementi. Bu sizning HTML'ingizdagi haqiqiy DOM tuguni bo'lishi kerak.callback
(ixtiyoriy): Komponent render qilinganidan keyin bajariladigan funksiya.
Misol:
Aytaylik, sizda App
nomli oddiy React komponenti bor:
import React from 'react';
import ReactDOM from 'react-dom/client';
function App() {
return (
<div>
<h1>Hello, React!</h1>
<p>This is a simple React component.</p>
</div>
);
}
Va ID'si "root" bo'lgan elementga ega HTML fayl:
<div id="root"></div>
App
komponentini "root" elementiga render qilish uchun siz quyidagidan foydalanasiz:
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Muhim Eslatma (React 18 va undan keyingi versiyalar): React 18 va undan keyingi versiyalarda ReactDOM.render
eskirgan hisoblanadi. Tavsiya etilgan yondashuv yuqorida ko'rsatilganidek ReactDOM.createRoot
'dan foydalanishdir. Bu React 18 da kiritilgan yangi konkurentlik xususiyatlarini ishga tushirish imkonini beradi.
Yangilanishlarni Tushunish: ReactDOM.render()
shuningdek, komponent ma'lumotlari o'zgarganda DOM'ni yangilash uchun ham mas'uldir. React joriy holatni kerakli holat bilan samarali taqqoslash uchun virtual DOM'dan foydalanadi va faqat haqiqiy DOM'ning kerakli qismlarini yangilaydi, bu esa ishlash samaradorligiga salbiy ta'sirni kamaytiradi.
ReactDOM.hydrate()
ReactDOM.hydrate()
serverda allaqachon render qilingan React ilovasini render qilishda ishlatiladi. Bu ilovangizning dastlabki yuklanish samaradorligini oshirish va SEO'ni yaxshilash uchun asosiy usuldir.
Server Tomonida Rendering (SSR): SSR'da React komponentlari serverda HTML'ga render qilinadi. Keyin bu HTML brauzerga yuboriladi, u esa dastlabki tarkibni darhol ko'rsata oladi. Biroq, brauzer hali ham ilovani "gidratlashi" kerak – ya'ni, hodisa tinglovchilarini biriktirishi va ilovani interaktiv holga keltirishi lozim. ReactDOM.hydrate()
serverda render qilingan HTML'ni olib, unga React hodisa ishlovchilarini biriktiradi va ilovani to'liq funksional holga keltiradi.
Sintaksis:
ReactDOM.hydrate(element, container[, callback])
Parametrlar ReactDOM.render()
bilan bir xil.
Misol:
Serverda siz React ilovangizni satrga render qilardingiz:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';
const html = ReactDOMServer.renderToString(<App />);
Bu HTML keyin mijozga yuboriladi.
Mijoz tomonida siz React hodisa ishlovchilarini biriktirish uchun ReactDOM.hydrate()
'dan foydalanasiz:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.hydrate(<App />);
Gidratlanishning Afzalliklari:
- Dastlabki Yuklanish Vaqtini Yaxshilash: Foydalanuvchilar JavaScript kodi to'liq yuklanmasidan oldin ham tarkibni darhol ko'rishadi.
- Yaxshilangan SEO: Qidiruv tizimlari to'liq render qilingan HTML'ni skanerlashi va indekslashi mumkin.
ReactDOM.unmountComponentAtNode()
ReactDOM.unmountComponentAtNode()
o'rnatilgan komponentni DOM'dan olib tashlash uchun ishlatiladi. Bu UI'ning qismlarini dinamik ravishda olib tashlash kerak bo'lganda yoki boshqa sahifaga o'tishdan oldin resurslarni tozalashda foydali bo'lishi mumkin.
Sintaksis:
ReactDOM.unmountComponentAtNode(container)
container
: Komponent o'rnatilgan DOM elementi.
Misol:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
// Keyinroq, komponentni o'chirish uchun:
root.unmount();
ReactDOM.unmountComponentAtNode(rootElement)
'ni chaqirgandan so'ng, App
komponenti DOM'dan olib tashlanadi va u bilan bog'liq barcha hodisa tinglovchilari va resurslar tozalanadi.
Qachon Foydalanish Kerak:
- Modal yoki dialog oynasini UI'dan olib tashlashda.
- Boshqa sahifaga o'tishdan oldin komponentni tozalashda.
- Turli komponentlar o'rtasida dinamik ravishda almashinishda.
ReactDOM.findDOMNode() (Eskirgan)
Muhim: ReactDOM.findDOMNode()
eskirgan hisoblanadi va zamonaviy React ilovalarida foydalanish uchun tavsiya etilmaydi. U ilgari o'rnatilgan komponentning asosiy DOM tuguniga kirish uchun ishlatilgan. Biroq, uning ishlatilishi tavsiya etilmaydi, chunki u React'ning abstraksiyasini buzadi va ayniqsa funksional komponentlar va hook'lar kiritilishi bilan oldindan aytib bo'lmaydigan xatti-harakatlarga olib kelishi mumkin.
Alternativ Yondashuvlar:
ReactDOM.findDOMNode()
'dan foydalanish o'rniga, ushbu alternativ yondashuvlarni ko'rib chiqing:
- Ref'lar: DOM tugunlariga to'g'ridan-to'g'ri kirish uchun React ref'laridan foydalaning. Bu DOM elementlari bilan o'zaro ishlash uchun tavsiya etilgan yondashuvdir.
- Boshqariladigan Komponentlar: Komponentlaringizni React yordamida holatini boshqarib, "boshqariladigan" qiling. Bu sizga DOM'ga bevosita kirishsiz UI'ni boshqarish imkonini beradi.
- Hodisa Ishlovchilari: Komponentlaringizga hodisa ishlovchilarini biriktiring va maqsadli DOM elementiga kirish uchun hodisa ob'ektidan foydalaning.
React 18 va ReactDOM'da Konkurentlik
React 18 konkurentlikni taqdim etadi — bu React'ga render qilish vazifalarini to'xtatish, pauza qilish, davom ettirish yoki bekor qilish imkonini beruvchi yangi mexanizm. Bu o'tishlar (transitions) va tanlab gidratlash (selective hydration) kabi kuchli xususiyatlarni ochib beradi, bu esa silliqroq va sezgirroq foydalanuvchi tajribasiga olib keladi.
ReactDOM'ga Ta'siri: ReactDOM.createRoot
'ni qabul qilish konkurentlik afzalliklaridan foydalanish uchun juda muhimdir. Bu metod ilovangiz render qilinadigan ildizni yaratadi, bu esa React'ga render vazifalarini yanada samaraliroq boshqarish imkonini beradi.
O'tishlar (Transitions): O'tishlar ba'zi holat yangilanishlarini shoshilinch bo'lmagan deb belgilashga imkon beradi, bu esa React'ga muhimroq yangilanishlarga ustunlik berish va sezgirlikni saqlab qolish imkonini beradi. Masalan, marshrutlar o'rtasida navigatsiya qilayotganda, marshrut o'tishini shoshilinch bo'lmagan yangilanish sifatida belgilashingiz mumkin, bu esa ma'lumotlarni yuklash paytida ham UI'ning sezgirligini ta'minlaydi.
Tanlab Gidratlash (Selective Hydration): Tanlab gidratlash yordamida React butun ilovani bir vaqtning o'zida gidratlash o'rniga, alohida komponentlarni talab bo'yicha gidratlashi mumkin. Bu katta ilovalar uchun dastlabki yuklanish vaqtini sezilarli darajada yaxshilaydi.
React ReactDOM uchun Global Mulohazalar
Global auditoriya uchun React ilovalarini ishlab chiqishda internatsionalizatsiya (i18n) va lokalizatsiya (l10n) kabi omillarni hisobga olish muhim. ReactDOM o'zi bu jihatlarni bevosita boshqarmaydi, lekin uni i18n kutubxonalari va eng yaxshi amaliyotlar bilan integratsiya qilish juda muhim.
- Internatsionalizatsiya (i18n): Ilovalarni muhandislik o'zgarishlarini talab qilmasdan turli tillar va mintaqalarga moslashtirish mumkin bo'lgan tarzda loyihalash va ishlab chiqish jarayoni.
- Lokalizatsiya (l10n): Internatsionalizatsiya qilingan ilovani ma'lum bir til yoki mintaqa uchun matnni tarjima qilish, formatlashni sozlash va madaniy farqlarni hisobga olgan holda moslashtirish jarayoni.
i18n Kutubxonalaridan Foydalanish:
react-i18next
va globalize
kabi kutubxonalar tarjimalarni, sana va vaqt formatlashni va lokalizatsiya bilan bog'liq boshqa vazifalarni boshqarish uchun vositalarni taqdim etadi. Ushbu kutubxonalar odatda React va ReactDOM bilan muammosiz integratsiyalashadi.
react-i18next bilan misol:
import React from 'react';
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation();
return (
<div>
<h1>{t('greeting')}</h1>
<p>{t('description')}</p>
</div>
);
}
Ushbu misolda useTranslation
hook'i t
tarjima funksiyasiga kirishni ta'minlaydi, u berilgan kalit uchun tegishli tarjimani oladi. Tarjimalarning o'zi odatda har bir til uchun alohida fayllarda saqlanadi.
O'ngdan Chapga (RTL) Joylashuv:
Arab va ibroniy kabi ba'zi tillar o'ngdan chapga yoziladi. Ushbu tillar uchun ilovalar ishlab chiqishda UI'ingiz RTL joylashuvini qo'llab-quvvatlashini ta'minlashingiz kerak. Bu odatda matn yo'nalishini sozlash, komponentlar joylashuvini aks ettirish va ikki yo'nalishli matnni boshqarishni o'z ichiga oladi.
ReactDOM'dan Foydalanish bo'yicha Eng Yaxshi Amaliyotlar
Samarali va qo'llab-quvvatlanadigan React ilovalarini ta'minlash uchun ReactDOM'dan foydalanishda ushbu eng yaxshi amaliyotlarga rioya qiling:
- React 18 va undan keyingi versiyalarda
ReactDOM.createRoot
'dan foydalaning: Bu ilovangizni render qilish va konkurentlik afzalliklaridan foydalanish uchun tavsiya etilgan usul. - Bevosita DOM manipulyatsiyasidan saqlaning: DOM'ni React boshqarishiga imkon bering. Bevosita DOM manipulyatsiyasi nomuvofiqliklarga va ishlash bilan bog'liq muammolarga olib kelishi mumkin.
- Ref'lardan tejamkorlik bilan foydalaning: Ref'lardan faqat kiritish elementiga fokus berish kabi aniq maqsadlar uchun DOM tugunlariga bevosita kirish kerak bo'lgandagina foydalaning.
- Render qilish samaradorligini optimallashtiring: Keraksiz qayta renderlarning oldini olish uchun memoizatsiya va shouldComponentUpdate kabi usullardan foydalaning.
- Yaxshilangan ishlash samaradorligi va SEO uchun server tomonida renderingni ko'rib chiqing.
- Internatsionalizatsiya va lokalizatsiya uchun i18n kutubxonalaridan foydalaning.
- Ilovangizni turli brauzerlar va qurilmalarda sinchkovlik bilan sinab ko'ring.
Xulosa
ReactDOM React ekotizimining muhim qismi bo'lib, React komponentlari va brauzer DOM'i o'rtasidagi ko'prikni ta'minlaydi. ReactDOM.render()
, ReactDOM.hydrate()
va ReactDOM.unmountComponentAtNode()
kabi asosiy metodlarni tushunib, eng yaxshi amaliyotlarni qo'llash orqali siz samarali, qo'llab-quvvatlanadigan va global miqyosda foydalanish mumkin bo'lgan React ilovalarini yaratishingiz mumkin. React 18 da konkurentlikning kiritilishi bilan ReactDOM.createRoot
'ni qabul qilish ishlash samaradorligi va sezgirlikning yangi darajalarini ochish uchun juda muhimdir. Global auditoriya uchun yaratayotganda, haqiqatan ham inklyuziv va qulay foydalanuvchi tajribalarini yaratish uchun internatsionalizatsiya va lokalizatsiya bo'yicha eng yaxshi amaliyotlarni hisobga olishni unutmang.