개인 프로젝트를 진행하면서,
react-bootstrap 패키지를 활용하여 작업했다. 기록용으로 남긴다 :)
components/Header.js
import React, { useState } from 'react'
import { Link } from 'react-router-dom'
import { House } from 'react-bootstrap-icons'
import Modal from './Modal'
export function Header() {
/* Modal Source */
const [show, setShow] = useState(false)
const openModal = () => {
setShow(true)
}
const closeModal = () => {
setShow(false)
}
/* Modal Source */
return (
<header>
<div className="px-3 py-2 text-bg-dark">
<div className="container">
<div className="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
<Link
className="d-flex align-items-center my-2 my-lg-0 me-lg-auto text-white text-decoration-none"
to={`/`}
>
Home
</Link>
<ul className="nav col-12 col-lg-auto my-2 justify-content-center my-md-0 text-small">
<li
onClick={() => {
openModal()
}}
>
<Link className="nav-link text-secondary">
<House size={24} className="bi d-block mx-auto mb-1" />
<span style={{ fontSize: 15 }}>유닛등록</span>
</Link>
</li>
</ul>
</div>
</div>
</div>
/* Modal Source*/
<Modal
show={show}
open={openModal}
close={closeModal}
header="유닛등록"
/>
</header>
)
}
export default Header
1. 나는 Header 부분 버튼에 Modal을 사용해야해서, Modal show, close를 위한 useState설정을 Header에 했다.
2. Header 부분에 Modal 컴포넌트를 붙힌다.
components/Modal.js
import React from 'react'
import Button from 'react-bootstrap/Button'
import Modal from 'react-bootstrap/Modal'
import AddUnit from './Modal_AddUnit'
//show: 보여주기 여부
//open: Header.js에서 가져온 모달을 열기 위한 props
//close: Header.js에서 가져온 모달을 닫기 위한 props
//header: 모달 Title
function ModalBody({ show, open, close, header }) {
const handleClose = close
let modalBody
if (header === '유닛등록') {
//title이 유닛등록이면 유닛등록용 ModalBody Component가져오기
modalBody = <AddUnit />
} else {
//Sample
modalBody = <Modal.Body>Sample</Modal.Body>
}
return (
<>
<Modal
show={show}
onHide={handleClose}
backdrop="static"
keyboard={false}
>
<Modal.Header closeButton>
<Modal.Title>{header}</Modal.Title>
</Modal.Header>
{modalBody} //Custom ModalBody
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
<Button variant="primary">Understood</Button>
</Modal.Footer>
</Modal>
</>
)
}
export default ModalBody
1. Header.js에서 show, openModal, closeModal, Header props를 가져와서 부모로부터 모달을 컨트롤 할 수 있도록 함
2. Modal을 매번 만들기 귀찮아 Body별로 관리하기위해 분기처리하였음
components/Modal_AddUnit.js
import React from 'react'
import Modal from 'react-bootstrap/Modal'
function AddUnit({ header }) {
return (
<>
<Modal.Body>...Add Unit Body</Modal.Body>
</>
)
}
export default AddUnit
Custom용으로 만든 Body이다. 요렇게 만들면
유닛 등록을 클릭하면 아주 잘 동작하는 것을 알 수 있다 !!!
:)