본문 바로가기

Frontend/React-Native

[ReactNative] Modal

728x90

Modal : 화면 가장 위에 표시될 레이어

광고를 띄워 뒤로 돌아가지 못하게하기 , 오류가 났을때 경고창을 띄워 작업을 일시 중단시키기 등등에 사용된다 

 

 

modal.js를 일단 생성합니다. 그 후 App.js에 modal.js를 임포트 해줍니다. 

여기까지는 항상하던거니까 생략!

 

modal IMPORT
import { Modal} from 'react-native';

마찬가지로 modal을 import해줍니다.

 

Modal tag

Modal Tag  를 사용하여 내부에 텍스트를 넣어두고 테스트해봅시다.

모달에는 거의 필수적인 property가 있는데 바로 visible입니다 

여기에 해당하는 값이 true일 때만 modal이 띄워집니다. 

일단 true로 설정하고 해보겠습니다.

class ModalComponent extends Component {
render() {
    return (
      <View style={{width: '100%'}}>
        <Modal visible={true}>
          <View style={{marginTop: 50, backgroundColor: 'green'}}>
            <Text> This is modal content</Text>
          </View>
        </Modal>
      </View>
    );
  }
}

 

결과)

 

모달을 제대로 사용하기 위해서는 visible의 true false값을 주어 모달을 띄우는 것을 조절해야합니다.

이를 위해 state와 state값을 true <-> false로 변경하는 기능을 하는 함수 와 함수를 실행하기위한 버튼을 만들어보도록 하겠습니다.

modal.js

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 * @flow strict-local
 */

import React, {Component} from 'react';
import {View, Text, StyleSheet, Modal, Button} from 'react-native';

class ModalComponent extends Component {
  state = {
    modal: false,
  };

  handleModal = () => {
    this.setState({
      modal: this.state.modal ? false : true,
    });
  };

  render() {
    return (
      <View style={{width: '100%'}}>
        <Button title={'show modal'} onPress={this.handleModal} />

        <Modal visible={this.state.modal}>
          <View style={{marginTop: 50, backgroundColor: 'green'}}>
            <Text> This is modal content</Text>
          </View>
        </Modal>
      </View>
    );
  }
}

const styles = StyleSheet.create({});

export default ModalComponent;

 

modal의 visible값을 state로 변경해주고,

버튼을 생성한 후 누르면 handleModal(true<->false)가 되도록 합니다. 

 

 

 app.js에서 불러와 실행하는 부분은 생략!

버튼 누르기전  버튼 누른 이후

버튼을 누르면 모달이 보이는 것을 확인할 수 있습니다!

(참고로 모달은 위에서 언급했듯 가장 상위에 보여지는 레이어 이므로 당연히 버튼이 가려지게 됩니다)

 

이번엔 아직 이제 이전으로 돌아가는/끄는버튼이 존재하지 않습니다. 

 

 

 

modal close

그것을 만들어 보도록 하겠습니다.

그냥 모달 태그안에 버튼을 복사해 넣으면됩니다. title은 조금 바꾸어줬습니다(close modal).

부르는 함수는 같기 때문에 기능 자체는 동일합니다. true<->false

<View style={{width: '100%'}}>
        <Button title={'show modal'} onPress={this.handleModal} />

        <Modal visible={this.state.modal}>
          <View style={{marginTop: 50, backgroundColor: 'green'}}>
            <Text> This is modal content</Text>
          </View>
          <Button title={'close modal'} onPress={this.handleModal} />
        </Modal>
</View>
      

 

버튼을 누르면 원래 창으로 돌아갑니다

 

 

Property 

animationType : none / slide / fade 를 가지며, 모달이 뜨는 방법을 정의함 (슬라이드해서 올라오는지, 점점 선명해지며 뜨게되는지)

onShow : 모달 창이 뜨면 트리거되는 property

 

 

여기까지 리액트 네이티브의 컴포넌트를 다루어보았습니다.

컴포넌트는 정말 많고, 프로퍼티도 정말 많으니 공식사이트를 참고하시는게 좋을 것 같습니다! 

728x90