View: co to je, vlastnosti kontejneru a React Native

Autor: IT Sectr Publikováno: 2026-07-05 Doba čtení: 10 min

Komponenta View v React Native je základním stavebním kamenem uživatelského rozhraní, obdobou HTML elementu div pro mobilní platformy. View podporuje vnořování do libovolné hloubky, spravuje umístění podřízených prvků přes Flexbox a zpracovává dotykové události. Podle React Native Docs, 2024 je View nejčastěji používanou komponentou v aplikacích — prakticky každá obrazovka je postavena z vnořených View kontejnerů. Komponenta se renderuje do nativního UIView na iOS a android.view.View na Androidu, což zajišťuje nativní výkon a přístupnost.

Hlavní body

  • View — základní kontejner React Native, obdoba HTML div pro mobilní obrazovky
  • Komponenta podporuje Flexbox pro umístění podřízených prvků
  • View se renderuje do nativních reprezentací iOS a Androidu
  • Podporuje dotykové události, gesta a animace přes Animated API
  • View nemá výchozí vizuální reprezentaci — styly se nastavují přes StyleSheet

Co je View v React Native

View je základní komponenta React Native, která slouží jako kontejner pro ostatní komponenty. Podporuje stylování přes StyleSheet, rozvržení přes Flexbox, zpracování dotyků, animace a transformace. View je abstrakcí nad nativními kontejnerovými prvky: UIView na iOS a android.view.View na Androidu.

V React Native nelze používat HTML prvky — místo nich jsou všechna rozvržení postavena z View. Dokonce i Text a Image jsou obvykle zabaleny do View pro pozicování. Komponenta může být prázdná (jen kontejner) nebo obsahovat libovolný počet podřízených prvků v libovolné hloubce.

View podporuje renderování na obě platformy z jednoho JavaScript kódu. Vlastnosti Flexbox, okraje, pozadí, stíny a ohraničení fungují stejně na iOS i Androidu. Platformní rozdíly jsou minimální — například stíny na iOS používají shadowColor/shadowOffset, a na Androidu elevation.

Podle React Native Layout Docs, 2024 je View optimalizován pro mobilní zařízení: nevytváří zbytečné nativní reprezentace při optimalizaci flatten a správně zpracovává kaskádovou aktualizaci při změně stylů rodiče.

Vlastnosti a API komponenty View

Komponenta View má bohatou sadu props pro správu vzhledu, umístění a interaktivity. Všechny props se dělí do několika kategorií: stylovací, dotykové události, přístupnost a platformní vlastnosti. Podívejme se na klíčové skupiny.

Stylovací props View

View podporuje všechny standardní CSS vlastnosti pro mobilní platformy. Klíčové z nich: flexDirection, justifyContent, alignItems pro pozicování; margin, padding pro okraje; backgroundColor, borderRadius pro vzhled; width, height, maxHeight pro rozměry.

Dotykové události a gesta

View může zpracovávat dotykové události přes props onStartShouldSetResponder, onMoveShouldSetResponder a onResponderGrant. Tyto události umožňují implementovat vlastní gesta bez knihoven. Pro standardní kliknutí se používají onTouchStart, onTouchEnd a onPress (přes Pressable nebo TouchableOpacity).

Platformní props

Na iOS jsou k dispozici shadowColor, shadowOffset, shadowOpacity, shadowRadius pro stíny. Na Androidu jsou tyto vlastnosti ignorovány — místo nich se používá elevation. Callbacky onLayout jsou volány při změně rozměrů View, což je užitečné pro adaptivní rozvržení.

Rozvržení s View a Flexboxem

Flexbox je jediný mechanismus rozvržení v React Native (na rozdíl od Webu, kde jsou k dispozici Grid a Float). Veškeré pozicování prvků probíhá přes Flexbox vlastnosti komponenty View. Ve výchozím nastavení je flexDirection u View nastaven na column, nikoli row jako na Webu, což odpovídá vertikální orientaci mobilních obrazovek.

Hlavní Flexbox vlastnosti ve View

flexDirection určuje směr hlavní osy: column (výchozí) nebo row. justifyContent spravuje rozložení podél hlavní osy (flex-start, center, space-between). alignItems — podél příčné osy (stretch — výchozí hodnota). flex určuje podíl dostupného prostoru pro podřízený prvek.

js
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>
);

Příklad ukazuje typickou strukturu: vnější View — karta, vnitřní row — řádek s avatarem a textovým blokem, content — sloupec s jménem a rolí. Taková vnořená struktura View je standardem pro každou obrazovku React Native.

Rozdíly mezi View a HTML div

Ačkoli je View koncepčně podobný HTML div, existují mezi nimi klíčové rozdíly, které je důležité pochopit při přenosu kódu z Webu na React Native. Tyto rozdíly se týkají renderování, stylů a výchozího chování.

VlastnostView (React Native)div (HTML)
Výchozí flexDirectioncolumnrow (v kontextu block)
width/heightVýchozí 100 % z rodičeauto podle obsahu
PosouváníNepodporováno (je třeba ScrollView)overflow: auto/scroll
StínyiOS: shadow*, Android: elevationbox-shadow
Zpracování událostíSystém ResponderUDálosti DOM
Nativní renderováníUIView / android.view.ViewPrvek DOM

Nejdůležitější rozdíl — výchozí flexDirection: column. To znamená, že bez explicitního nastavení jsou podřízené prvky umístěny vertikálně, nikoli horizontálně. Druhý rozdíl: width a height View se ve výchozím nastavení roztahují na veškerý dostupný prostor rodiče (analogicky k width: 100 % v CSS).

Praktické příklady s View

Podívejme se na dva reálné příklady použití View v React Native aplikacích: centrování obsahu na celou obrazovku a vytvoření adaptivní mřížky z karet. Oba vzory se vyskytují v každém projektu.

Příklad 1: náhradní obrazovka s centrováním

Pro vytvoření prázdného stavu (empty state) se používá View s flex: 1 a centrováním na obou osách. Toto je standardní vzor pro obrazovky načítání, chyb a prázdných seznamů.

js
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 },
});

Kombinace justifyContent: center a alignItems: center ve View s flex: 1 centruje obsah na obou osách přes celou obrazovku. Toto je nejrozšířenější vzor použití View v React Native.

Příklad 2: mřížka karet s Flexboxem

Pro zobrazení dvou sloupců produktů nebo článků se používá View s flexDirection: row, flexWrap: wrap a podřízenými View s pevnou šířkou. Tento vzor nahrazuje CSS Grid v React Native.

js
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 },
});

V tomto příkladu vnější View s flexWrap: wrap funguje jako obdoba CSS Grid. Každá karta zabírá 48 % šířky a ponechává mezery mezi sloupci. Toto je typický vzor pro katalogy a kanály obsahu.

Často kladené otázky

Čím se View v React Native liší od div?

View má výchozí flexDirection: column (ne row jako v HTML), nepodporuje posouvání, width se ve výchozím nastavení roztahuje na 100 % rodiče a stíny se nastavují přes shadow* vlastnosti na iOS a elevation na Androidu.

Může být View klikatelný?

Ano, View podporuje zpracování dotykových událostí přes onTouchStart, onTouchEnd a systém Responder. Pro tlačítka je však lepší použít TouchableOpacity, Pressable nebo Button — poskytují vizuální zpětnou vazbu a jsou v souladu s Accessibility API.

Musím používat View pro každý prvek?

Ne nutně. React Native optimalizuje renderování pomocí View flattening — zbytečné View bez stylů a událostí jsou odstraněny z nativního stromu. Pro čitelnost kódu je však lepší používat View jako kontejner pro logické bloky rozhraní.

Jak vytvořit kulatý View?

Nastavte borderRadius na polovinu šířky a výšky (např. width: 50, height: 50, borderRadius: 25). Pokud jsou šířka a výška stejné, takový View se stane kruhem. Pro avatary je to standardní vzor.

Jak vytvořit průhledný View?

Nastavte opacity od 0 do 1 (např. opacity: 0.5). Můžete také použít backgroundColor s RGBA (backgroundColor: 'rgba(0,0,0,0.5)'). Rozdíl je v tom, že opacity se aplikuje na celý kontejner a jeho obsah, zatímco RGBA pouze na pozadí.

Shrnutí

  • View — základní kontejner React Native, obdoba HTML div pro vytváření rozhraní
  • Komponenta podporuje Flexbox s výchozím flexDirection: column
  • View se renderuje do nativních UIView (iOS) a android.view.View (Android)
  • Klíčové props: stylovací vlastnosti Flexbox, dotykové události přes systém Responder, onLayout pro rozměry
  • View flattening automaticky odstraňuje zbytečné kontejnery z nativního stromu
  • Pro tlačítka používejte TouchableOpacity nebo Pressable místo View s onTouch
  • Vnořené View — standardní architektura každé obrazovky v aplikaci React Native

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také