Компоненты: View, Text, Image
Базовые компоненты React Native.
View
Аналог <div>. Контейнер без визуального представления.
<View style={styles.box}>
{/* дочерние элементы */}
</View>
Не может содержать текст напрямую. Только через <Text>.
Свойства:
<View
style={styles.box}
onLayout={(e) => console.log(e.nativeEvent.layout)}
pointerEvents="none"
/>
Text
Аналог <p> или <span>. Отображает текст.
<Text>Простой текст</Text>
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.title}
>
Очень длинный текст, который обрежется до двух строк и закончится многоточием
</Text>
Свойства:
numberOfLines— максимум строкellipsizeMode—'head','middle','tail','clip'selectable— можно ли выделятьonPress— нажатие на текст
Вложенные:
<Text style={styles.base}>
Обычный, <Text style={styles.bold}>жирный</Text>, снова обычный.
</Text>
Image
Картинки. Источник — локальный файл или URL.
import { Image } from 'react-native';
<Image
source={require('./assets/logo.png')}
style={{ width: 100, height: 100 }}
/>
<Image
source={{ uri: 'https://example.com/image.jpg' }}
style={{ width: 200, height: 200 }}
/>
Важно: для сетевых картинок нужны размеры — width и height.
Свойства:
<Image
source={{ uri: url }}
style={styles.image}
resizeMode="cover" // 'cover', 'contain', 'stretch', 'repeat', 'center'
onLoad={() => console.log('загружено')}
onError={(e) => console.log('ошибка', e.nativeEvent.error)}
/>
resizeMode
- cover — заполняет, обрезая
- contain — вписывает целиком
- stretch — растягивает
- repeat — повторяет
- center — по центру
Комбинация
import { View, Text, Image, StyleSheet } from 'react-native';
export default function UserCard({ user }: { user: User }) {
return (
<View style={styles.card}>
<Image source={{ uri: user.avatar }} style={styles.avatar} />
<View style={styles.info}>
<Text style={styles.name}>{user.name}</Text>
<Text style={styles.email} numberOfLines={1}>
{user.email}
</Text>
</View>
</View>
);
}
const styles = StyleSheet.create({
card: {
flexDirection: 'row',
padding: 16,
backgroundColor: '#fff',
borderRadius: 12,
marginBottom: 12,
},
avatar: {
width: 48,
height: 48,
borderRadius: 24,
},
info: {
marginLeft: 12,
flex: 1,
},
name: {
fontSize: 16,
fontWeight: '600',
},
email: {
fontSize: 14,
color: '#666',
marginTop: 2,
},
});
Если ты уже знаешь React
В вебе ты бы использовал <div>, <p>, <img>. В React Native это View, Text, Image. Пропсы похожи, но src заменён на source, а alt отсутствует.
Итоги
View— контейнерText— текст, сnumberOfLinesImage— картинки, нужны размерыresizeModeуправляет масштабированием- Вложенные
Textнаследуют стиль