React Native dagi View komponenti foydalanuvchi interfeysining asosiy qurilish bloki, mobil platformalar uchun HTML div elementining analogidir. View istalgan chuqurlikdagi joylashishni qo'llab-quvvatlaydi, bolaviy elementlarning joylashuvini Flexbox orqali boshqaradi va teginish hodisalarini qayta ishlaydi. React Native Docs, 2024 ma'lumotlariga ko'ra, View ilovalarda eng ko'p ishlatiladigan komponentdir — deyarli har bir ekran joylashtirilgan View konteynerlaridan qurilgan. Komponent iOS da UIView va Android da android.view.View ga renderlanadi, bu esa native ishlash va foydalanish imkoniyatini ta'minlaydi.
Asosiy fikrlar
View — boshqa komponentlar uchun konteyner bo'lib xizmat qiladigan React Native ning asosiy komponentidir. U StyleSheet orqali stillashtirishni, Flexbox orqali joylashuvni, teginishni qayta ishlashni, animatsiyalar va transformatsiyalarni qo'llab-quvvatlaydi. View native konteyner elementlari ustidagi abstraksiyadir: iOS da UIView va Android da android.view.View.
React Native da HTML elementlaridan foydalanish mumkin emas — ularning o'rniga barcha joylashuvlar View dan quriladi. Hatto Text va Image ham odatda joylashtirish uchun View ga o'raladi. Komponent bo'sh (faqat konteyner) yoki istalgan chuqurlikdagi istalgan sondagi bolaviy elementlarni o'z ichiga olishi mumkin.
View bir JavaScript kodidan ikkala platformada renderlashni qo'llab-quvvatlaydi. Flexbox xususiyatlari, bo'shliqlar, fon, soyalar va chegaralar iOS va Android da bir xil ishlaydi. Platforma farqlari minimal — masalan, iOS da soyalar shadowColor/shadowOffset dan foydalanadi, Android da esa elevation.
React Native Layout Docs, 2024 ma'lumotlariga ko'ra, View mobil qurilmalar uchun optimallashtirilgan: flatten optimallashtirishda keraksiz native ko'rinishlarni yaratmaydi va ota-ona stillari o'zgarganda kaskad yangilanishini to'g'ri qayta ishlaydi.
View komponenti tashqi ko'rinish, joylashuv va interaktivlikni boshqarish uchun boy props to'plamiga ega. Barcha propslar bir necha toifaga bo'linadi: stillashtirish, teginish hodisalari, foydalanish imkoniyati va platforma xususiyatlari. Keling, asosiy guruhlarni ko'rib chiqaylik.
View mobil platformalar uchun barcha standart CSS xususiyatlarini qo'llab-quvvatlaydi. Ulardan asosiylari: joylashtirish uchun flexDirection, justifyContent, alignItems; bo'shliqlar uchun margin, padding; tashqi ko'rinish uchun backgroundColor, borderRadius; o'lchamlar uchun width, height, maxHeight.
View onStartShouldSetResponder, onMoveShouldSetResponder va onResponderGrant propslari orqali teginish hodisalarini qayta ishlashi mumkin. Bu hodisalar kutubxonasiz maxsus imo-ishoralarni amalga oshirish imkonini beradi. Standart bosishlar uchun onTouchStart, onTouchEnd va onPress (Pressable yoki TouchableOpacity orqali) ishlatiladi.
iOS da soyalar uchun shadowColor, shadowOffset, shadowOpacity, shadowRadius mavjud. Android da bu xususiyatlar e'tiborga olinmaydi — ularning o'rniga elevation ishlatiladi. onLayout callbacklari View o'lchamlari o'zgarganda chaqiriladi, bu adaptiv joylashuvlar uchun foydalidir.
Flexbox React Native dagi yagona joylashuv mexanizmidir (Grid va Float mavjud bo'lgan Web dan farqli o'laroq). Barcha elementlarni joylashtirish View komponentining Flexbox xususiyatlari orqali amalga oshiriladi. View da standart flexDirection column ga o'rnatilgan, Web dagi kabi row emas, bu mobil ekranlarning vertikal yo'nalishiga mos keladi.
flexDirection asosiy o'qning yo'nalishini belgilaydi: column (standart) yoki row. justifyContent asosiy o'q bo'ylab taqsimotni boshqaradi (flex-start, center, space-between). alignItems — ko'ndalang o'q bo'ylab (stretch — standart qiymat). flex bolaviy element uchun mavjud joyning ulushini belgilaydi.
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const CardLayout = () => (
<View style={styles.card}>
<View style={styles.row}>
<View style={styles.avatar} />
<View style={styles.content}>
<Text style={styles.name}>John Doe</Text>
<Text style={styles.role}>Developer</Text>
</View>
</View>
</View>
);
Misolda odatiy tuzilma ko'rsatilgan: tashqi View — karta, ichki row — avatar va matn blokli qator, content — ism va rol bilan ustun. Bunday joylashtirilgan View tuzilmasi har bir React Native ekrani uchun standartdir.
View kontseptual jihatdan HTML div ga o'xshash bo'lsa-da, ular o'rtasida kodni Web dan React Native ga ko'chirishda muhim bo'lgan asosiy farqlar mavjud. Bu farqlar renderlash, stillar va standart xatti-harakatga tegishli.
| Xususiyat | View (React Native) | div (HTML) |
|---|---|---|
| Standart flexDirection | column | row (block kontekstida) |
| width/height | Standart ota-onaning 100% | mazmunga qarab auto |
| Skrollash | Qo'llab-quvvatlanmaydi (ScrollView kerak) | overflow: auto/scroll |
| Soyalar | iOS: shadow*, Android: elevation | box-shadow |
| Hodisalarni qayta ishlash | Responder tizimi | DOM hodisalari |
| Native render | UIView / android.view.View | DOM elementi |
Eng muhim farq — standart flexDirection: column. Bu shuni anglatadiki, aniq belgilanmagan holda bolaviy elementlar vertikal joylashadi, gorizontal emas. Ikkinchi farq: View ning width va height i standart ota-onaning barcha mavjud joyiga yoyiladi (CSS dagi width: 100% analogi).
React Native ilovalarida View dan foydalanishning ikkita haqiqiy misolini ko'rib chiqaylik: tarkibni butun ekranga markazlashtirish va kartalardan adaptiv tarmoq yaratish. Ikkala naqsh ham har bir loyihada uchraydi.
Bo'sh holat (empty state) yaratish uchun flex: 1 va ikkala o'qda markazlashtirish bilan View ishlatiladi. Bu yuklash, xato va bo'sh ro'yxat ekranlari uchun standart naqshdir.
const EmptyState = ({ message }) => (
<View style={styles.container}>
<Text style={styles.icon}>{icon}</Text>
<Text style={styles.message}>{message}</Text>
</View>
);
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
icon: { fontSize: 48 },
message: { fontSize: 16, color: '#666', marginTop: 16 },
});
justifyContent: center va alignItems: center kombinatsiyasi flex: 1 bo'lgan View da tarkibni ikkala o'qda butun ekranga markazlashtiradi. Bu React Native da View ning eng keng tarqalgan foydalanish naqshidir.
Ikki ustunli mahsulot yoki maqolalarni ko'rsatish uchun flexDirection: row, flexWrap: wrap va doimiy enli bolaviy View lar bilan View ishlatiladi. Bu naqsh React Native da CSS Grid ni o'rnini bosadi.
const ProductGrid = ({ products }) => (
<View style={styles.grid}>
{products.map((product) => (
<View key={product.id} style={styles.card}>
<Image source={{ uri: product.image }} />
<Text>{product.name}</Text>
</View>
))}
</View>
);
const styles = StyleSheet.create({
grid: {
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'space-between',
},
card: { width: '48%', marginBottom: 16 },
});
Bu misolda flexWrap: wrap bo'lgan tashqi View CSS Grid ning analogi sifatida ishlaydi. Har bir karta enining 48% ni egallaydi, ustunlar orasida bo'shliqlar qoladi. Bu kataloglar va kontent lentalari uchun odatiy naqshdir.
Tez-tez beriladigan savollar
View standart flexDirection: column ga ega (HTML dagi kabi row emas), skrollashni qo'llab-quvvatlamaydi, width standart ota-onaning 100% ga yoyiladi, soyalar esa iOS da shadow* va Android da elevation orqali o'rnatiladi.
Ha, View onTouchStart, onTouchEnd va Responder tizimi orqali teginish hodisalarini qayta ishlashi mumkin. Biroq tugmalar uchun TouchableOpacity, Pressable yoki Button dan foydalanish yaxshiroq — ular vizual fikr-mulohazani ta'minlaydi va Accessibility API ga mos keladi.
Shart emas. React Native View flattening orqali renderlashni optimallashtiradi — stillari va hodisalari bo'lmagan ortiqcha View lar native daraxtdan olib tashlanadi. Biroq kodning o'qilishi uchun View dan interfeysning mantiqiy bloklari uchun konteyner sifatida foydalanish yaxshiroq.
borderRadius ni en va balandlikning yarmiga teng qilib o'rnating (masalan, width: 50, height: 50, borderRadius: 25). Agar en va balandlik bir xil bo'lsa, bunday View aylanaga aylanadi. Avatarlar uchun bu standart naqshdir.
opacity ni 0 dan 1 gacha o'rnating (masalan, opacity: 0.5). Shuningdek RGBA bilan backgroundColor dan foydalanish mumkin (backgroundColor: 'rgba(0,0,0,0.5)'). Farqi shundaki, opacity butun konteyner va uning tarkibiga qo'llaniladi, RGBA esa faqat fonga.
Xulosa
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.