Основные встроенные компоненты
<View> - аналог <div>
<Text> - юбой текст на экране должен быть внутри <Text>
<TextInput> - аналог <input> / <textarea>
Кнопки:
Button - нельзя стилизовать (только цвет), нет кастомных детей.
TouchableOpacity - стандарт для 90% кнопок
123456789<TouchableOpacityonPress={() => {}}activeOpacity={0.7} // прозрачность при нажатии (0-1)disabled={false}style={styles.button}><Text style={styles.buttonText}>Кастомная кнопка</Text><Icon name="arrow" /></TouchableOpacity>
TouchableHighlight - с цветовым фидбеком
1234567<TouchableHighlightonPress={() => {}}underlayColor="#ddd" // цвет подложки при нажатииactiveOpacity={0.8}><View><Text>Кнопка</Text></View></TouchableHighlight>
TouchableWithoutFeedback - без визуального фидбека
123<TouchableWithoutFeedback onPress={() => {}}><View><Text>Невидимая зона клика</Text></View></TouchableWithoutFeedback>
ScrollView - для маленьких списков (всё рендерится сразу). До 20-30 элементов, неизвестная высота, разнородный контент.
FlatList - для больших списков (виртуализация)
Ключевые отличия FlatList:
- Автоматическая переиспользование компонентов (как key в React)
- renderItem получает { item, index, separators }
- Разделители: ItemSeparatorComponent — линия между элементами
<Image>
12345678910111213141516// Локальное изображение (требует require)<Image source={require('./assets/logo.png')} style={{ width: 100, height: 100 }} />// Сетевое изображение (нужен uri)<Imagesource={{ uri: 'https://example.com/image.jpg' }}style={{ width: 200, height: 200 }}resizeMode="cover" // cover, contain, stretch, repeat, centeronLoad={() => console.log('загружено')}onError={(e) => console.log('ошибка', e.nativeEvent.error)}/>// Для фонового изображения — используй ImageBackground<ImageBackground source={require('./bg.png')} style={{ flex: 1 }}><Text>Поверх картинки</Text></ImageBackground>
<SafeAreaView> - Только для iPhone X и новее (с «челкой» и динамическим островом)
12345import { SafeAreaView } from 'react-native';<SafeAreaView style={{ flex: 1, backgroundColor: '#fff' }}><Text>Контент не залезет под челку</Text></SafeAreaView>
<Modal>
12345678910111213<Modalvisible={isVisible}transparent={true} // прозрачный фонanimationType="slide" // slide, fade, noneonRequestClose={() => setIsVisible(false)} // для Android (кнопка назад)><View style={styles.modalOverlay}><View style={styles.modalContent}><Text>Модальное окно</Text><Button title="Закрыть" onPress={() => setIsVisible(false)} /></View></View></Modal>
<ActivityIndicator> - лоадер
12345<ActivityIndicatorsize="large" // small, large, или число (Android)color="#0000ff"animating={true}/>
<StatusBar> - управление верхней панелью
123456<StatusBarbarStyle="light-content" // dark-content, light-content, defaultbackgroundColor="black" // только Androidtranslucent={true} // полупрозрачнаяhidden={false}/>