React
[React] react 에서 우편번호 찾기 api 사용하기 - 떽떽대는 개발공부
떽이
2021. 2. 22. 17:26
오늘은 react 에서 오픈 api 를 사용하여 우편번호 찾기 기능을 구현 해볼 것이다.
다음에서 제공하는 api 를 사용할 것이다.
react-daum-postcode
우편번호 검색이라고 되어있는 버튼을 클릭하면 우편번호 검색 창이 팝업 형식으로 나타나게 구현할 계획이다.
아래와 같이 버튼과 팝업창의 기준이 될 공간을 하나 만들어 준다.
src/Test.js
import React, { useState } from 'react';
import PopupDom from './PopupDom';
import PopupPostCode from './PopupPostCode';
const Test = () => {
// 팝업창 상태 관리
const [isPopupOpen, setIsPopupOpen] = useState(false)
// 팝업창 열기
const openPostCode = () => {
setIsPopupOpen(true)
}
// 팝업창 닫기
const closePostCode = () => {
setIsPopupOpen(false)
}
return(
<div>
// 버튼 클릭 시 팝업 생성
<button type='button' onClick={openPostCode}>우편번호 검색</button>
// 팝업 생성 기준 div
<div id='popupDom'>
{isPopupOpen && (
<PopupDom>
<PopupPostCode onClose={closePostCode} />
</PopupDom>
)}
</div>
</div>
)
}
export default Test;
위와 같이 간단히 우편번호 검색 이라는 버튼이 보이는 컴포넌트를 만들었다.
이제 팝업창을 띄워줄 수 있도록 react-dom 을 하나 더 생성 해주어야 한다.
PopupDom.js 파일을 작성 해준다.
src/PopupDom.js
import ReactDom from 'react-dom';
const PopupDom = ({ children }) => {
const el = document.getElementById('popupDom');
return ReactDom.createPortal(children, el);
};
export default PopupDom;
이제 실제로 팝업창에 나타날 페이지인 PopupPostCode.js 파일을 생성 해준다.
src/PopupPostCode.js
import React from 'react';
import DaumPostcode from "react-daum-postcode";
const PopupPostCode = (props) => {
// 우편번호 검색 후 주소 클릭 시 실행될 함수, data callback 용
const handlePostCode = (data) => {
let fullAddress = data.address;
let extraAddress = '';
if (data.addressType === 'R') {
if (data.bname !== '') {
extraAddress += data.bname;
}
if (data.buildingName !== '') {
extraAddress += (extraAddress !== '' ? `, ${data.buildingName}` : data.buildingName);
}
fullAddress += (extraAddress !== '' ? ` (${extraAddress})` : '');
}
console.log(data)
console.log(fullAddress)
console.log(data.zonecode)
props.onClose()
}
const postCodeStyle = {
display: "block",
position: "absolute",
top: "10%",
width: "600px",
height: "600px",
padding: "7px",
};
return(
<div>
<DaumPostcode style={postCodeStyle} onComplete={handlePostCode} />
// 닫기 버튼 생성
<button type='button' onClick={() => {props.onClose()}} className='postCode_btn'>닫기</button>
</div>
)
}
export default PopupPostCode;
팝업창이 생성되고, 따로 닫기 버튼이 있지 않아서 버튼을 하나 생성하고 div 로 감싸주었다.
닫기 버튼을 클릭하면 props 로 받아온 onClose 를 호출하여 페이지를 닫는다.
위와 같이 간단히 api 를 사용하여 주소창을 구현하면 아래와 같은 결과를 얻을 수 있다.
- 검색 전
- 검색 후
- 콘솔창