StyleSheet — bu nədir, React Native-də stillərin yaradılması

Müəllif: IT Sectr Dərc olunub: 2026-07-06 Oxuma vaxtı: 10 dəq

StyleSheet — React Native-də komponent stillərinin yaradılması və idarə edilməsi üçün API, veb inkişafındakı CSS-stil cədvəllərinə bənzəyir. StyleSheet.create performansı optimallaşdırır, stil obyektlərini rəqəmsal identifikatorlara çevirərək JavaScript-Native körpüsü vasitəsilə məlumat ötürülməsini azaldır. Inline-stillərdən fərqli olaraq, create vasitəsilə yaratma modulun işə salınması zamanı bir dəfə baş verir. API haqqında daha ətraflı Meta sənədlərində oxuyun.

Əsas məqamlar

  • StyleSheet — rəqəmsal identifikatorlar vasitəsilə optimallaşdırma ilə deklarativ stil yaratmaq üçün API
  • StyleSheet.create stil obyektini ID-yə çevirir, JS-Native körpüsü ilə ötürülən məlumatı azaldır
  • Inline-stillər hər renderdə yeni obyektlər yaradır, StyleSheet.create — modul yüklənərkən bir dəfə
  • Flexbox — React Native-də düzülüşün əsası: flexDirection, alignItems, justifyContent və flex
  • Modul təşkili stillərin StyleSheet.flatten vasitəsilə kompozisiya ilə ayrı fayllara çıxarılmasını nəzərdə tutur

StyleSheet nədir?

StyleSheet — React Native-in komponent stillərini təyin etmək üçün daxili API-si. Veb inkişafındakı CSS-dən fərqli olaraq, RN stilləri təsvir etmək üçün JavaScript obyektlərindən istifadə edir. StyleSheet.create — stillərlə obyekti qəbul edən və rəqəmsal identifikatorlarla obyekt qaytaran əsas metoddur.

StyleSheet React Native-in nüvəsinə daxildir və əlavə paketlərin quraşdırılmasını tələb etmir. Meta məlumatlarına görə (2026), React Native-də layihələrin 95%-i statik stillər üçün StyleSheet.create-dən istifadə edir. Alternativlər: styled-components, Emotion, NativeWind (RN üçün Tailwind) — lakin daxili StyleSheet nüvə üçün standart olaraq qalır.

Tarix və təkamül

React Native-in ilk versiyalarında (2015) stillər yalnız inline-obyektlər vasitəsilə təyin edilirdi. StyleSheet.create RN 0.4-də optimallaşdırma kimi ortaya çıxdı. Konsepsiya CSS-dən götürülüb: stilləri mantıqdan oxunaqlılıq və performans üçün ayırın. İllər keçdikcə API genişləndi: absoluteFill, hairlineWidth, flatten əlavə edildi.

StyleSheet.create vs inline-stillər

StyleSheet.create və inline-stillər arasındakı fərq performans üçün kritik əhəmiyyət daşıyır. Inline-stil — komponentin hər renderində yaradılan adi JavaScript obyektidir. StyleSheet.create — modul yüklənərkən bir dəfə yaradılan və rəqəmsal ID-yə çevrilən obyekt.

Inline-stil ötürərkən React Native hər dəfə bütün obyekti JavaScript-Native körpüsü vasitəsilə göndərir. Mürəkkəb stilləri olan komponent üçün bu, hər renderdə ötürülən onlarla xüsusiyyətdir. StyleSheet.create yalnız rəqəm identifikatoru ötürür, körpü yükünü azaldır.

js
// StyleSheet.create — optimallaşdırılmış yanaşma
const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 16,
    backgroundColor: '#f5f5f5',
    borderRadius: 8,
  },
  title: {
    fontSize: 18,
    fontWeight: 'bold',
    color: '#333',
  },
});

// Inline style — hər renderdə yeni obyekt yaradır
<View style={{
  flex: 1,
  padding: 16,
  backgroundColor: '#f5f5f5',
  borderRadius: 8,
}} />

<Text style={styles.title}>Title</Text>

Inline nə vaxt istifadə edilməlidir: vəziyyətdən asılı olan dinamik stillər üçün (pressed, selected, active). Statik stillər üçün həmişə StyleSheet.create-dən istifadə edin. Qayda: statika → create, dinamika → inline-funksiya.

StyleSheet vasitəsilə Flexbox düzülüşü

Flexbox — React Native-də yeganə düzülüş mexanizmi (CSS Grid dəstəklənmir, float isə mövcud deyil). StyleSheet.create flex-konteynerləri və onların uşaq elementlərini təsvir etmək üçün istifadə olunur. Əsas xüsusiyyətlər: flex (doldurma əmsalı), flexDirection (row | column), justifyContent, alignItems.

React Native-də defolt flexDirection column-dur (CSS-də — row). Veb inkişafından keçərkən yadda saxlanmalı ilk şey budur. Bütün View-lər defolt olaraq flex-konteynerlərdir. Elementi mərkəzləşdirmək üçün alignItems: 'center' + justifyContent: 'center' istifadə edin.

js
const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center',
    padding: 20,
  },
  row: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    width: '100%',
  },
  box: {
    width: 50,
    height: 50,
    backgroundColor: 'blue',
  },
});

Vacib: React Native-də bütün ölçülər vahidsiz verilir (sadəcə rəqəm). Faizlər işləyir, lakin yalnız valideynə nisbətən width və height üçün. margin və padding rəqəmlər qəbul edir. Adaptivlik üçün faizlər əvəzinə flex istifadə edin — bu müxtəlif ekranlarda daha etibarlıdır.

StyleSheet API: create, flatten, hairlineWidth, absoluteFill

StyleSheet API-yə create-dən başqa bir neçə metod daxildir. StyleSheet.flatten stillər massivini bir obyektdə birləşdirir — kompozisiya və stillərin xarici komponentlərə ötürülməsi üçün faydalıdır. StyleSheet.hairlineWidth cihazda minimal görünən xətt enini qaytarır.

StyleSheet.absoluteFill — əvvəlcədən təyin edilmiş stil { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }. Overlay qatları, modal pəncərələr və bütün ekranı əhatə edən mütləq yerləşdirmə üçün istifadə olunur. StyleSheet.absoluteFillObject — genişləndirmə üçün obyekt formasında eyni şey.

js
// flatten — stillərin birləşdirilməsi
const base = StyleSheet.create({
  button: { padding: 12, borderRadius: 8 },
  primary: { backgroundColor: 'blue' },
});

const combined = StyleSheet.flatten([base.button, base.primary]);
// { padding: 12, borderRadius: 8, backgroundColor: 'blue' }

// hairlineWidth — minimal xətt
const styles = StyleSheet.create({
  separator: {
    height: StyleSheet.hairlineWidth,
    backgroundColor: '#ccc',
  },
  overlay: {
    ...StyleSheet.absoluteFillObject,
    backgroundColor: 'rgba(0,0,0,0.5)',
  },
});

StyleSheet.hairlineWidth ayırıcılar və haşiyələr üçün faydalıdır — ekran sıxlığından asılı olmayaraq həmişə 1 fiziki piksel kimi görünür. Retina displeylərdə bu 0.5 məntiqi nöqtə, adi ekranlarda — 1 nöqtədir. HairlineWidth-i ciddi şəkildə müəyyən ölçüdə olmalı elementlər üçün istifadə etməyin.

Dimensions API ilə adaptiv düzülüş

Dimensions API StyleSheet ilə birlikdə müxtəlif ekran ölçülərinə uyğunlaşan düzülüş üçün istifadə olunur. Dimensions.get('window') pəncərənin enini və hündürlüyünü qaytarır. Ekran döndərilməsi zamanı reaktiv yeniləmə üçün React Native-dən useWindowDimensions hook-undan istifadə edin.

StyleSheet.create CSS-də olduğu kimi media sorğularını dəstəkləməsə də, siz create daxilində Dimensions əsasında dəyərlər hesablaya və ya funksiya vasitəsilə dinamik stillərdən istifadə edə bilərsiniz. Breakpoints üçün müxtəlif en diapazonları üçün ayrı stillər yaradın.

js
import { useWindowDimensions } from 'react-native';

const ResponsiveCard = () => {
  const { width } = useWindowDimensions();
  const isLarge = width > 768;

  return (
    <View style={[styles.card, isLarge && styles.cardLarge]}>
      <Text>Responsive card</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  card: {
    width: '100%',
    padding: 16,
  },
  cardLarge: {
    width: '50%',
    alignSelf: 'center',
  },
});

useWindowDimensions ekran döndərilməsi və Split View ilə planşetlərdə pəncərə ölçüsünün dəyişməsi zamanı avtomatik yenilənir. SSR (React Native Web) üçün Dimensions.get-in komponent mount edildikdən sonra çağırıldığından əmin olun ki, server və müştəri arasında uyğunsuzluq olmasın.

Layihədə stillərin təşkili

StyleSheet-in təşkili layihədə kodun davamlılığına və təkrar istifadəsinə təsir edir. Üç yanaşma: komponent daxilində lokal stillər (styles.js komponentin yanında), qlobal stillər (rənglər, boşluqlar, tipoqrafiya sabitləri ilə theme.js) və kompozisiya vasitəsilə modul stillər.

Tövsiyə olunan struktur: rənglər, ölçülər və tipoqrafiya sabitləri ilə theme.js; hər komponentin spesifik stilləri üçün onun yanında Component.styles.js; əsas və spesifik stillərin birləşməsi üçün StyleSheet.flatten. Böyük layihələr üçün tema generasiyası ilə Design System-dən istifadə edin.

js
// theme.js — qlobal sabitlər
export const colors = {
  primary: '#6200EE',
  background: '#FFFFFF',
  text: '#1C1B1F',
  surface: '#F5F5F5',
};

export const spacing = {
  xs: 4, sm: 8, md: 16, lg: 24, xl: 32,
};

export const typography = {
  h1: { fontSize: 24, fontWeight: 'bold', lineHeight: 32 },
  body: { fontSize: 16, lineHeight: 24 },
};

// Button.styles.js
import { colors, spacing, typography } from './theme';

export default StyleSheet.create({
  button: {
    backgroundColor: colors.primary,
    paddingVertical: spacing.sm,
    paddingHorizontal: spacing.lg,
    borderRadius: 8,
  },
  text: {
    ...typography.body,
    color: '#FFFFFF',
    textAlign: 'center',
  },
});

Modul təşkilinin üstünlükləri: rənglər və boşluqlar üçün vahid həqiqət mənbəyi, refaktorinqin sadələşdirilməsi (primary-i dəyişdiniz — bütün düymələr yeniləndi), flatten vasitəsilə stillərin təkrar istifadəsi, kodun oxunaqlılığı və proqnozlaşdırıla bilməsi. TypeScript layihələri üçün declare module vasitəsilə temaya tiplər əlavə edin.

Tez-tez verilən suallar

StyleSheet.create dinamik istifadə edilə bilərmi?

StyleSheet.create dinamik stillər üçün nəzərdə tutulmayıb — modul yüklənərkən bir dəfə çağırılır. Proplardan və ya vəziyyətdən asılı olan stillər üçün inline-obyektlər və ya stillər massivi qaytaran funksiyadan istifadə edin.

StyleSheet.create və object arasında fərq nədir?

StyleSheet.create performansı optimallaşdırır: stillər rəqəmsal ID-lərə çevrilir və JS-Native körpüsü vasitəsilə rəqəmlər kimi ötürülür. Adi obyektlər hər renderdə ötürülür. Statik stillər üçün həmişə create istifadə edin.

React Native-də stilləri necə varis etmək olar?

Birbaşa varislik yoxdur. Stil massivlərini birləşdirmək üçün StyleSheet.flatten və ya əsas stili genişləndirmək üçün spread-operatorundan istifadə edin. Text üçün valideyn stilləri uşaq elementlər tərəfindən varis edilmir — hər Text açıq stillər tələb edir.

StyleSheet media sorğularını dəstəkləyirmi?

Xeyr, StyleSheet CSS media sorğularını dəstəkləmir. Adaptivlik üçün useWindowDimensions və ya Dimensions API və şərti stillərdən istifadə edin. React-native-responsive kitabxanası breakpoints ilə kömək edir.

React Native ilə CSS freymvorklarından istifadə etmək olarmı?

StyleSheet CSS-i dəstəkləmir. Tailwind bənzəri sintaksis üçün NativeWind-dən istifadə edin. Styled-components üçün react-native-adaptation mövcuddur. Layihələrin əksəriyyəti üçün daxili StyleSheet keyfiyyətli UI yaratmaq üçün kifayətdir.

Nəticə

  • StyleSheet — rəqəmsal identifikatorlar vasitəsilə optimallaşdırma ilə JavaScript obyektləri vasitəsilə stilləri təyin etmək üçün React Native-in daxili API-si
  • StyleSheet.create statik məlumatlar üçün inline-stillərdən daha üstündür: stillər hər renderdə deyil, bir dəfə yaradılır
  • Flexbox — RN-də düzülüşün əsası defolt flexDirection: column ilə (CSS-dən fərqli olaraq)
  • StyleSheet.flatten stil massivlərini birləşdirir, absoluteFill valideyn konteynerini doldurur, hairlineWidth 1 fiziki piksel verir
  • useWindowDimensions müxtəlif ekranlara və cihaz döndərilmələrinə uyğunlaşma təmin edir
  • Modul təşkili theme.js və Component.styles.js ilə kodun davamlılığını artırır
  • StyleSheet.hairlineWidth ayırıcılar üçün əvəzolunmazdır — cihazın piksel sıxlığına uyğunlaşır

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.

Layihəni müzakirə et

Həm də oxuyun