Основные компоненты и их отличия от HTML
Компоненты — это строительные блоки любого React Native-приложения. Это как кирпичи для дома: нужно понять, как их использовать, чтобы строить интерфейсы. Но если в вебе вы привыкли использовать div, span, img или p, то в React Native всё работает иначе. Здесь нет DOM-элементов — вместо этого используются специальные компоненты, которые маппятся (сопоставляются) на родные элементы платформы Android или iOS.
Давайте пройдемся по ключевым компонентам React Native и посмотрим, как они работают.
View — аналог div
View — это базовый контейнер в React Native. Аналогично div в HTML, он используется для оборачивания других элементов и создания структуры пользовательского интерфейса.
Пример:
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const ExampleView = () => {
return (
<View style={styles.container}>
<Text>Привет, View!</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
backgroundColor: '#eaeaea',
padding: 16,
borderRadius: 8,
},
});
export default ExampleView;
Что здесь происходит:
Viewв React Native заменяетdiv, но у него нет таких понятий, как марджины, паддинги, ширина и высота "по умолчанию". Всё задаётся через стили.- Стилизация происходит через объект
StyleSheet, который напоминает работу с inline-стилями в React, но немного упрощена.
Text — аналог span или p
Text используется для отображения текста. Если в вебе вы могли писать текст прямо в div, то в React Native текст всегда должен быть внутри компонента Text.
Пример:
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const ExampleText = () => {
return (
<View style={styles.container}>
<Text style={styles.title}>Заголовок</Text>
<Text style={styles.content}>Вот пример текста, который отображается внутри компонента Text.</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
padding: 16,
},
title: {
fontSize: 24,
fontWeight: 'bold',
},
content: {
fontSize: 16,
color: '#555',
},
});
export default ExampleText;
Особенности:
- В отличие от HTML, текст нельзя вставлять в
Viewили другие компоненты. Всегда используйтеText. - Стилизация текста, такая как
fontSize,color,fontWeight, и другое, задаётся через стили.
Image — аналог img
Для отображения изображений в React Native используется компонент Image. Вы можете загружать как локальные изображения (из папки проекта), так и удалённые по URL.
Пример локального изображения:
import React from 'react';
import { View, Image, StyleSheet } from 'react-native';
const ExampleImage = () => {
return (
<View style={styles.container}>
<Image source={require('./assets/example.png')} style={styles.image} />
</View>
);
};
const styles = StyleSheet.create({
container: {
alignItems: 'center',
marginTop: 16,
},
image: {
width: 200,
height: 200,
borderRadius: 100,
},
});
export default ExampleImage;
Пример загрузки изображения по URL:
<Image source={{ uri: 'https://example.com/image.png' }} style={{ width: 100, height: 100 }} />
Особенности:
source— это обязательное свойство, которое указывает, откуда брать изображение.- Все размеры (ширина, высота) для изображений должны быть указаны явно. Если вы их пропустите, изображение не отобразится.
ScrollView — прокручиваемые области
ScrollView предоставляет возможность создавать прокручиваемые области. Это полезно, если контент не умещается на экране.
Пример:
import React from 'react';
import { ScrollView, Text, StyleSheet } from 'react-native';
const ExampleScrollView = () => {
return (
<ScrollView style={styles.scroll}>
{Array.from({ length: 20 }, (_, i) => (
<Text key={i} style={styles.text}>
Элемент {i + 1}
</Text>
))}
</ScrollView>
);
};
const styles = StyleSheet.create({
scroll: {
padding: 16,
backgroundColor: '#f9f9f9',
},
text: {
fontSize: 18,
marginBottom: 8,
},
});
export default ExampleScrollView;
Особенности:
- В отличие от веба, где слово "прокрутка" ассоциируется с тегом
overflow, здесь для этого нужен специальный компонентScrollView. - Используйте
ScrollViewдля относительно небольших списков. Для больших наборов данных лучше использоватьFlatList(мы разберём его позднее).
Сравнение с HTML
| HTML Tag | React Native Component | Особенности |
|---|---|---|
div |
View |
Основной контейнер для обёртки элементов |
span, p |
Text |
Используется только для текста |
img |
Image |
Требует указания размеров (width, height) |
overflow: auto |
ScrollView |
Обеспечивает прокрутку контента |
Практический пример: упражнение с базовыми компонентами
Давайте создадим небольшой экран, который будет включать заголовок, изображение и немного текста с прокруткой.
import React from 'react';
import { View, Text, Image, ScrollView, StyleSheet } from 'react-native';
export const BasicComponentsScreen = () => {
return (
<ScrollView contentContainerStyle={styles.container}>
<Text style={styles.title}>Привет, React Native!</Text>
<Image
source={{ uri: 'https://reactnative.dev/img/tiny_logo.png' }}
style={styles.image}
/>
<Text style={styles.content}>
React Native позволяет создавать нативные мобильные приложения с использованием JavaScript и React.
Он использует нативные компоненты под капотом, что обеспечивает высокую производительность.
С ним можно разрабатывать приложения под Android и iOS одновременно.
</Text>
</ScrollView>
);
};
const styles = StyleSheet.create({
container: {
padding: 16,
alignItems: 'center',
},
title: {
fontSize: 24,
fontWeight: 'bold',
marginBottom: 16,
},
image: {
width: 100,
height: 100,
marginBottom: 16,
},
content: {
fontSize: 16,
textAlign: 'center',
},
});
export default BasicComponentsScreen;
Типичные ошибки:
- Текст вне
Text: если вы попробуете вставить текст вView(не оборачивая его вText), приложение просто упадёт. Всегда оборачивайте текст вText. - Отсутствие размеров у
Image: если не указатьwidthиheight, изображение не отобразится. Размеры — это обязательное требование дляImage. - Большие списки с
ScrollView: использованиеScrollViewдля больших данных может привести к проблемам с производительностью. Это место дляFlatListилиVirtualizedList.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ