Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
65 of 196 menu
◀ ▶

Компонент Modal

Компонент Modal рисует отдельный слой над приложением. Параметр visible включает и выключает показ. Дочерние элементы задают содержимое окна. Анимацию появления задаёт animationType из перечисления AnimationType. На iOS вид окна задаёт presentationStyle из PresentationStyle. На Android onRequestClose обязателен: его вызывают по кнопке назад.

Синтаксис

<Modal visible={true} onRequestClose={() => {}}> <Text>abcde</Text> </Modal>

Параметры

Параметр Описание
visible true показывает слой, false прячет его.
children Содержимое модального окна.
animationType Как окно появляется и исчезает. Строка из перечисления AnimationType.
presentationStyle На iOS задаёт, на весь экран окно или лист снизу. Строка из перечисления PresentationStyle.
transparent true оставляет фон прозрачным, виден экран под слоем.
onRequestClose Вызов при закрытии с Android по кнопке назад. На Android параметр обязателен.

Пример

Давайте откроем простое окно по кнопке:

import { useState } from 'react'; import { View, Text, Modal, Button } from 'react-native'; export default function App() { const [visible, setVisible] = useState(false); return ( <View> <Button title="abcde" onPress={() => setVisible(true)} /> <Modal visible={visible} animationType="slide" onRequestClose={() => setVisible(false)} > <View> <Text>12345</Text> <Button title="abcde" onPress={() => setVisible(false)} /> </View> </Modal> </View> ); }

На экране кнопка. После нажатия поверх появляется слой с текстом '12345' и кнопкой закрытия.

Пример

Давайте сделаем полупрозрачный фон и лист на iOS:

import { useState } from 'react'; import { View, Text, Modal, Button, Platform } from 'react-native'; export default function App() { const [visible, setVisible] = useState(false); return ( <View> <Button title="12345" onPress={() => setVisible(true)} /> <Modal visible={visible} transparent={true} animationType="fade" presentationStyle={ Platform.OS === 'ios' ? 'pageSheet' : undefined } onRequestClose={() => setVisible(false)} > <View style={{ flex: 1, justifyContent: 'center' }}> <Text>abcde</Text> </View> </Modal> </View> ); }

На экране кнопка и поверх неё затемнённый слой с текстом 'abcde'. На iOS окно может выехать листом.

Смотрите также

  • перечисление AnimationType,
    которое задаёт анимацию появления
  • перечисление PresentationStyle,
    которое задаёт вид окна на iOS
  • класс Alert,
    который показывает системное окно с кнопками
  • компонент View,
    которым оформляют содержимое внутри слоя
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить