가수면

리액트에서 모달창 띄우기 본문

React/React

리액트에서 모달창 띄우기

니비앙 2022. 12. 7. 17:32

코드를 요약하지 않고 정석적인 방법을 적음

 

useState를 이용해 true, false 값으로 모달창 여닫는 기능 만들어 줌

// 부모 컴포넌트

const Todo = (props) => {
  const [modalIsOpen, setMdalIsOpen] = useState(false)

  const deleteHandler = () => {
    setMdalIsOpen(true)
  }
  const closeModalHandler = () => {
    setMdalIsOpen(false)
  }
.
.
.
      </div>
      {modalIsOpen && <Modal onCancel={closeModalHandler} onConfirm={closeModalHandler} />}
      {modalIsOpen && <Backdrop onCancel={closeModalHandler} />}
    </div>
  )
}

export default Todo

 

자식 컴포넌트들

import React from 'react'

const Modal = (props) => {
  const cancelHandler = () => {
    props.onCancel()
  }
  const confirmHandler = () => {
    props.onConfirm()
  }


  return (
    <div className='modal'>
      <p>Are you sure?</p>
      <button className='btn btn--alt' onClick={cancelHandler}>Cancel</button>
      <button className='btn' onClick={confirmHandler}>Confirm</button>
    </div>
  )
}

export default Modal
import React from 'react'

const Backdrop = (props) => {
  return <div className='backdrop' onClick={props.onCancel} />
}

export default Backdrop

핵심은 '모달창처럼' 보이게 만들어주는 것이다.

Modal이라는 컴포넌트의 div태그에 z축의 위치를 지정해주는 z-index와 position: fixed 클래스를 주어서 모달창처럼 보이도록 하고,

모달창이 떠 있는 동안 Backdrop이라는 컴포넌트가 배경색을 어둡게 만들면 진자 모달창이 뜬 것처럼 보이는 효과가 나온다.

그리고 나머지 기능은 props를 통해 구현하면 된다.

 

'React > React' 카테고리의 다른 글

커스텀 훅  (0) 2022.12.10
useMemo / useCallback  (0) 2022.12.10
map으로 돌릴 때 데이터 타입  (0) 2022.12.05
useEffect  (0) 2022.12.02
props 비구조화 할당  (0) 2022.12.01
Comments