React Native-də View komponenti istifadəçi interfeysinin əsas tikinti blokudur, mobil platformalar üçün HTML div elementinin analoqudur. View istənilən dərinlikdə yerləşdirməni dəstəkləyir, alt elementlərin yerləşməsini Flexbox vasitəsilə idarə edir və toxunma hadisələrini emal edir. React Native Docs, 2024-ə görə, View tətbiqlərdə ən çox istifadə olunan komponentdir — praktiki olaraq hər bir ekran yerləşdirilmiş View konteynerlərindən qurulur. Komponent iOS-da UIView və Android-də android.view.View-ə render olunur ki, bu da native performans və əlçatanlığı təmin edir.
Əsas məqamlar
View — digər komponentlər üçün konteyner rolunu oynayan React Native-in əsas komponentidir. O, StyleSheet vasitəsilə stilləşdirməni, Flexbox vasitəsilə düzülüşü, toxunma emalını, animasiyaları və transformasiyaları dəstəkləyir. View native konteyner elementləri üzərində abstraksiyadır: iOS-da UIView və Android-də android.view.View.
React Native-də HTML elementlərindən istifadə etmək mümkün deyil — onların əvəzinə bütün düzülüşlər View-dən qurulur. Hətta Text və Image da adətən yerləşdirmə üçün View-ə bükülür. Komponent boş (sadəcə konteyner) və ya istənilən sayda alt elementi istənilən dərinlikdə ehtiva edə bilər.
View bir JavaScript kodundan hər iki platformada render-i dəstəkləyir. Flexbox xüsusiyyətləri, boşluqlar, fon, kölgələr və haşiyələr iOS və Android-də eyni işləyir. Platforma fərqləri minimaldır — məsələn, iOS-da kölgələr shadowColor/shadowOffset istifadə edir, Android-də isə elevation.
React Native Layout Docs, 2024-ə görə, View mobil cihazlar üçün optimallaşdırılıb: flatten optimallaşdırması zamanı lazımsız native təsvirlər yaratmır və valideyn stilləri dəyişdikdə kaskad yenilənməsini düzgün emal edir.
View komponenti görünüşü, yerləşməsi və interaktivliyi idarə etmək üçün zəngin props dəstinə malikdir. Bütün propslar bir neçə kateqoriyaya bölünür: stilləşdirmə, toxunma hadisələri, əlçatanlıq və platforma xüsusiyyətləri. Əsas qrupları nəzərdən keçirək.
View mobil platformalar üçün bütün standart CSS xüsusiyyətlərini dəstəkləyir. Əsas olanlar: yerləşdirmə üçün flexDirection, justifyContent, alignItems; boşluqlar üçün margin, padding; görünüş üçün backgroundColor, borderRadius; ölçülər üçün width, height, maxHeight.
View onStartShouldSetResponder, onMoveShouldSetResponder və onResponderGrant propsları vasitəsilə toxunma hadisələrini emal edə bilər. Bu hadisələr kitabxanasız xüsusi jestləri tətbiq etməyə imkan verir. Standart kliklər üçün onTouchStart, onTouchEnd və onPress (Pressable və ya TouchableOpacity vasitəsilə) istifadə olunur.
iOS-da kölgələr üçün shadowColor, shadowOffset, shadowOpacity, shadowRadius mövcuddur. Android-də bu xüsusiyyətlər nəzərə alınmır — onların əvəzinə elevation istifadə olunur. onLayout callback-ləri View-in ölçüləri dəyişdikdə çağırılır ki, bu da adaptiv düzülüşlər üçün faydalıdır.
Flexbox React Native-də yeganə düzülüş mexanizmidir (Grid və Float-ın mövcud olduğu Web-dən fərqli olaraq). Bütün element yerləşdirmə View komponentinin Flexbox xüsusiyyətləri vasitəsilə həyata keçirilir. View-də defolt olaraq flexDirection column-a təyin edilib, Web-dəki kimi row deyil, bu da mobil ekranların şaquli istiqamətinə uyğundur.
flexDirection əsas oxun istiqamətini müəyyən edir: column (defolt) və ya row. justifyContent əsas ox boyunca paylanmanı idarə edir (flex-start, center, space-between). alignItems — eninə ox boyunca (stretch — defolt dəyər). flex alt element üçün mövcud yerin payını təyin edir.
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>
);
Nümunədə tipik struktur göstərilib: xarici View — kart, daxili row — avatar və mətn bloku olan sətir, content — ad və rol ilə sütun. Belə yerləşdirilmiş View strukturu hər bir React Native ekranı üçün standartdır.
View konseptual olaraq HTML div-ə bənzəsə də, aralarında kodu Web-dən React Native-ə köçürərkən vacib olan əsas fərqlər var. Bu fərqlər render, stillər və defolt davranışa aiddir.
| Xüsusiyyət | View (React Native) | div (HTML) |
|---|---|---|
| Defolt flexDirection | column | row (block kontekstində) |
| width/height | Defolt olaraq valideynin 100%-i | məzmuna görə auto |
| Sürüşdürmə | Dəstəklənmir (ScrollView lazımdır) | overflow: auto/scroll |
| Kölgələr | iOS: shadow*, Android: elevation | box-shadow |
| Hadisə emalı | Responder sistemi | DOM hadisələri |
| Native render | UIView / android.view.View | DOM elementi |
Ən vacib fərq — defolt olaraq flexDirection: column. Bu o deməkdir ki, açıq şəkildə təyin edilmədən alt elementlər şaquli şəkildə yerləşir, üfüqi deyil. İkinci fərq: View-in width və height-i defolt olaraq valideynin bütün mövcud yerinə yayılır (CSS-də width: 100% analoqu).
React Native tətbiqlərində View-dən istifadənin iki real nümunəsini nəzərdən keçirək: məzmunun bütün ekrana mərkəzləşdirilməsi və kartlardan adaptiv şəbəkə yaradılması. Hər iki nümunə hər bir layihədə rast gəlinir.
Boş vəziyyət (empty state) yaratmaq üçün flex: 1 və hər iki oxda mərkəzləşdirmə ilə View istifadə olunur. Bu yükləmə, xəta və boş siyahı ekranları üçün standart nümunədir.
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 və alignItems: center kombinasiyası flex: 1 olan View-də məzmunu hər iki oxda bütün ekrana mərkəzləşdirir. Bu React Native-də View-in ən geniş yayılmış istifadə nümunəsidir.
İki sütunlu məhsul və ya məqalə göstərmək üçün flexDirection: row, flexWrap: wrap və sabit enli alt View-lər olan View istifadə olunur. Bu nümunə React Native-də CSS Grid-i əvəz edir.
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 nümunədə flexWrap: wrap olan xarici View CSS Grid-in analoqu kimi işləyir. Hər bir kart eninin 48%-ni tutur, sütunlar arasında boşluqlar qalır. Bu kataloqlar və məzmun lentləri üçün tipik nümunədir.
Tez-tez verilən suallar
View-in defolt olaraq flexDirection: column (HTML-dəki kimi row deyil), sürüşdürməni dəstəkləmir, width defolt olaraq valideynin 100%-nə yayılır, kölgələr isə iOS-da shadow* və Android-də elevation vasitəsilə təyin edilir.
Bəli, View onTouchStart, onTouchEnd və Responder sistemi vasitəsilə toxunma hadisələrini emal edə bilər. Lakin düymələr üçün TouchableOpacity, Pressable və ya Button istifadə etmək daha yaxşıdır — onlar vizual əks əlaqə təmin edir və Accessibility API-yə uyğundur.
Mütləq deyil. React Native View flattening vasitəsilə renderi optimallaşdırır — stilləri və hadisələri olmayan artıq View-lər native ağacdan silinir. Lakin kodun oxunaqlılığı üçün View-dən interfeysin məntiqi blokları üçün konteyner kimi istifadə etmək daha yaxşıdır.
borderRadius-i en və hündürlüyün yarısına bərabər təyin edin (məsələn, width: 50, height: 50, borderRadius: 25). En və hündürlük eyni olarsa, belə View dairəyə çevrilir. Avatarlar üçün bu standart nümunədir.
opacity-ni 0-dan 1-ə qədər təyin edin (məsələn, opacity: 0.5). Həmçinin RGBA ilə backgroundColor istifadə etmək olar (backgroundColor: 'rgba(0,0,0,0.5)'). Fərq ondadır ki, opacity bütün konteynerə və onun məzmununa tətbiq olunur, RGBA isə yalnız fona.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun