본문 바로가기
React

[React] react-daum-postcode 우편번호, 주소 검색

by jyee 2024. 11. 15.
728x90
반응형

 

 

https://postcode.map.daum.net/guide

 

Daum 우편번호 서비스

우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다.

postcode.map.daum.net

 

 

우편 번호로 주소를 찾아야 할 때 자주 보이는 다음 우편번호 서비스 API를 사용하는 법! 

리액트에서 쓸 수 있는 react-daum-postcode 패키지를 사용할 것이다. 

 

1. 설치 

npm

npm install react-daum-postcode

yarn

yarn add react-daum-postcode

 

 

먼저 패키지 다운 받고 

잘 받아졌는지 확인 

 

2. 사용

import DaumPostcode from 'react-daum-postcode';

const addressInput = () => {

    const completeHandler = (data:any) =>{
        console.log("주소데이터", data);
    }
    
    return(
        <div>
            <DaumPostcode 
                onComplete={completeHandler}
            />
        </div>
    );
}

 

이런식으로 <DaumPostcode> 로 사용하면 된다

onComplete는 DaumPostcode API를 사용할 때 사용자가 선택한 정보를 받아올 callback함수라서 반드시 사용되어야 할 필수 기능이라 추가해줘야한다.

주소 검색을 아무거나 하고 상세주소를 클릭해보자

그리고 개발자 도구에서 콘솔로그 찍힌거 보면 내가 검색해서 나온 주소의 결과 데이터들이 어마무시하게 많다.

여기서 나는 필요한게 주소 address/roadAddress랑 우편번호인 zoneCode 였다.

이제 이 값들이 필요하니깐 state 처리 해서 화면에 나오게 하면 된다

 

import DaumPostcode from 'react-daum-postcode';

const addressInput = () => {
	//추가추가
  const [zipCode, setZipCode] = useState<string>("");
  const [roadAddress, setRoadAddress] = useState<string>("");

    const completeHandler = (data:any) =>{
        console.log("주소데이터", data)
      	setZipCode(data.zonecode); 
      	setRoadAddress(data.roadAddress);
    }
    
    return(
        <div>
       	    <p>
                우편번호 : {zipCode} 
            </p>
            <p>
                주소 : {roadAddress} 
            </p>
            <DaumPostcode 
                onComplete={completeHandler}
            />
        </div>
    );
}

 

 

여기서 나는 우편번호검색이 우편검색 버튼을 클릭했을때만 모달처럼 띄우고 싶었다. 

혹시나 이 코드 참고한다면 css는 tailwindcss로 작성되어 있다! tailwind css 쓰지 않는다면 style 꼭 바꾸시길..! 

import DaumPostcode from "react-daum-postcode";
import { useState } from "react";

export default function App() {
  const [openPostcode, setOpenPostcode] = useState(false);
  const [zipCode, setZipCode] = useState<string>("");
  const [roadAddress, setRoadAddress] = useState<string>("");

  const handle = {
    clickButton: () => {
      console.log("모달창열기");
      setOpenPostcode((current) => !current);
    },
    selectAddress: (data: any) => {
      console.log("주소데이터", data);
      setZipCode(data.zonecode);
      setRoadAddress(data.roadAddress);
      setOpenPostcode(false);
    },
  };

  return (
    <div className="App">
      <div>
        <p>우편번호 : {zipCode}</p>
        <p>주소 : {roadAddress}</p>
        <button
          type="button"
          onClick={handle.clickButton}
          className="border h-8"
        >
          우편번호 검색
        </button>
        {openPostcode && (
          <div className="fixed inset-0 bg-black bg-opacity-40 flex items-center justify-center z-50 ">
            <div className="bg-white rounded-lg p-8 w-96 shadow-lg relative">
              <button
                className="absolute top-3 right-3 text-gray-500"
                onClick={() => setOpenPostcode(false)}
              >
                ✕
              </button>
              <DaumPostcode
                onComplete={(data) => {
                  handle.selectAddress(data);
                }}
                autoClose={false}
              />
            </div>
          </div>
        )}
      </div>
    </div>
  );
}

 

우편번호 검색이라는 버튼을 누르면 뒷 배경이 약간 어둡게 되면서 모달창처럼 나온다! 그리고 주소가 선택되면 모달창이 자동으로 꺼진다

이렇게 되면 다음 우편번호 사용 API 완성 😄 

728x90
반응형

'React' 카테고리의 다른 글

[React] Props로 전달되는 문자열 줄바꿈 하기  (0) 2024.09.26
[React]페이지 이탈 시 확인 모달창 띄우기  (0) 2024.09.13
[React]useCallback  (0) 2024.09.03
[React] useMemo  (2) 2024.09.03
[React] useContext api  (0) 2024.08.27