Основные компоненты
React Native предоставляет набор базовых компонентов, из которых строятся все экраны мобильного приложения. Эти компоненты отображаются как нативные элементы на iOS и Android, в отличие от HTML-элементов в вебе.
View
Компонент View — это основной контейнерный элемент. Он не отображает содержимое сам по себе, но группирует другие компоненты и применяет к ним стили. По функциональности он ближе всего к <div> в HTML, но имеет ряд особенностей:
- Не может содержать текст напрямую — для этого используется
Text. - Поддерживает большинство layout-свойств:
flex,padding,margin,backgroundColorи т.д. - Является блочным элементом по умолчанию.
Пример:
<View style={{ padding: 16, backgroundColor: '#fff' }}>
<Text>Заголовок</Text>
</View>
Text
Компонент Text предназначен исключительно для отображения текста. Важно помнить:
- Текст можно размещать только внутри
Text. - Другие
Textмогут быть вложенными — это позволяет применять разные стили к частям строки. - Не поддерживает layout-свойства вроде
width,height,margin— только текстовые (fontSize,color,fontWeightи т.п.).
Пример:
<Text style={{ fontSize: 18 }}>
Обычный текст <Text style={{ fontWeight: 'bold' }}>жирный фрагмент</Text>
</Text>
Image
Компонент Image отображает изображения — как локальные, так и сетевые. Основные особенности:
- Обязательно требует явного указания размеров (
widthиheight) для корректного отображения. - Для локальных изображений используется
require(). - Для сетевых — объект с ключом
uri.
Пример:
// Локальное изображение
<Image source={require('./assets/logo.png')} style={{ width: 100, height: 100 }} />
// Сетевое изображение
<Image source={{ uri: 'https://example.com/image.jpg' }} style={{ width: 200, height: 200 }} />
ScrollView и FlatList
Оба компонента позволяют прокручивать содержимое, но используются в разных сценариях.
ScrollView подходит для небольших списков или контента фиксированной длины. Он рендерит всё содержимое сразу, что может повлиять на производительность при большом объёме данных.
FlatList оптимизирован для длинных списков: он рендерит только видимые элементы и переиспользует их при прокрутке (техника «virtualization»). Требует указания data и renderItem.
Пример FlatList:
<FlatList
data={['Элемент 1', 'Элемент 2', 'Элемент 3']}
renderItem={({ item }) => <Text>{item}</Text>}
keyExtractor={(item, index) => index.toString()}
/>
TextInput
Компонент TextInput создаёт поле для ввода текста. Поддерживает стандартные свойства: value, onChangeText, placeholder, keyboardType и другие.
Пример:
<TextInput
placeholder="Введите имя"
value={name}
onChangeText={setName}
/>
Button, TouchableOpacity, Pressable
Для обработки нажатий используются интерактивные компоненты.
Button — простой компонент с ограниченной кастомизацией. Принимает title и onPress.
TouchableOpacity и Pressable дают больше контроля над внешним видом. При нажатии TouchableOpacity слегка затемняет содержимое, а Pressable позволяет полностью управлять состоянием (нажат/не нажат).
Примеры:
<TouchableOpacity onPress={() => console.log('Нажато!')}>
<View style={{ padding: 12, backgroundColor: '#007AFF' }}>
<Text style={{ color: '#fff' }}>Кнопка</Text>
</View>
</TouchableOpacity>
<Pressable
onPress={() => console.log('Нажато!')}
onPressIn={() => console.log('Палец коснулся')}
onPressOut={() => console.log('Палец оторван')}
style={({ pressed }) => ({
opacity: pressed ? 0.6 : 1,
padding: 12,
backgroundColor: '#007AFF',
borderRadius: 8,
})}
>
<Text style={{ color: '#fff', textAlign: 'center' }}>
Нажми меня
</Text>
</Pressable>