react-daum-postcode 사용 방법
설치
npm install react-daum-postcode
import
import DaumPostcode from "react-daum-postcode";
주소 검색 완료 함수 생성
onComplete
함수에 주소 검색 완료 시 실행시킬 로직을 바인딩한다.- Address 타입의 주소(data)를 인자로 받을 수 있다.
(Address 타입은 react-daum-postcode에서 import 한다.) - 완료 함수 실행 시 주소창은 자동으로 사라진다.
- data 예시
사용 예시 (with Antd 모달)
import DaumPostcode from "react-daum-postcode";
import { Modal, Button } from "antd";
// 주소 검색 모달
const onToggleModal = () => {
setIsOpen((prev) => !prev);
};
const handleComplete = (data) => {
// 시.도 저장
setQ1(data.sido);
// 구.군 저장
setQ3(
data.sigungu.length > 3
? data.sigungu.split("").splice(0, 3).join("")
: data.sigungu
);
// 상세주소 앞 2단어 제외하고 저장 ('서울 강남구' 제외하고 저장)
let splitAddress = data.address.split(" ").splice(2).join(" ");
setDetailaddress(splitAddress);
onToggleModal(); // 주소창은 자동으로 사라지므로 모달만 꺼주면
};
{
isOpen && (
<Modal
onOk={onToggleModal}
onCancel={onToggleModal} // isOpen이 false가 되고 화면이 리렌더되면서 모달이 뜨지 않는다.
>
<DaumPostcode onComplete={handleComplete} />
</Modal>
);
}
모달과 함께 사용할 때 주의할 점
주소가 들어있는 모달을 닫았다가 다시 열면 주소 라이브러리가 나오지 않는다. (라이브러리 특성)
위의 코드는 다시 열었을 대 새롭게 열리도록 작성한 것이라서 문제가 되지 않는다.
모달을 켜고 끄는 방식 2가지
(모달을 사용하는 다른 경우에도 적용 가능, 두 가지 방법 중 상황에 맞게 사용하면 된다.)
1. 숨겼다가 다시 보여주기 (내용은 유지)
visible={isOpen}
isOpen이 true이면 모달을 보여준다.isOpen
이 false일 경우 숨겨진 것 뿐이고 사라진 것은 아니다.- 주소 라이브러리의 경우에는, 이렇게 하면 주소 UI가 다시 나오지 않는다.
- 입력한 내용이 유지되어야 하는 경우 사용한다. (ex. 이력서 작성)
<Modal
visible={isOpen}
onOk={handleOk}
onCancel={handleCancel}
>
<DaumPostcode onComplete={handleComplete} />
</Modal>
사용시 주의할 점
visible 프로퍼티는 버전 문제로 더이상 지원하지 않는다.
visible을 사용해야 할 경우 버전을 낮춰 다운로드 하는 것을 권장한다.
2. 조건부 렌더링 ( = 삭제했다가 새로 만들기 💗 )
visible={true}
visible을 항상 true로 만든다.isOpen
이 true일 때 Modal을 그리게 한다. (조건부 렌더링)isOpen
이 false로 변경되면 화면이 리렌더되어 화면에 아예 그려지지 않는다. (삭제되지 않는다.)- 입력한 내용이 삭제되어야 하는 경우 사용한다. (ex. 결제 정보, 비밀번호 입력)
{isOpen && (
<Modal
visible={true}
onOk={handleOk}
onCancel={handleCancel}
>
<DaumPostcode onComplete={handleComplete} />
</Modal>
)}
'React' 카테고리의 다른 글
[React Vite] React Vite TypeScript 환경에서 SPA 프로젝트 세팅하기 (0) | 2023.01.27 |
---|---|
[React] 렌더링 최적화 (1) | 2023.01.26 |
[React] Redux vs Recoil vs React Query (0) | 2022.10.06 |
[React] 상태 관리, 이제 Recoil 하세요 (FE CONF) (0) | 2022.10.05 |
[React] React-Query와 Suspense (0) | 2022.10.05 |
Comment