가계부 + 다이어리

회원가입 - 다음 주소 api 사용 (React)

ssoyul 2024. 7. 2. 15:36

 

위 회원가입에서 필요한 주소를 입력하기 위해 주소 찾기 api를 끌어왔다.

원래 행안부에서 제공하는 주소찾기를 사용하려 했으나

다음이 더 간편하다는 말을 듣고 머리를 싸매던 중 옮기게 되었다...

 

공식 문서 사이트: https://postcode.map.daum.net/guide

 

 

1. react-daum-postcode 설치

yarn add react-daum-postcode

 

 

위 명령어로 설치한 다음 원하는 컴포넌트에서 import하여 사용이 가능하다.

import DaumPostCode from "react-daum-postcode";

 

 

2. onComplete 메서드 사용

onComplete 메서드는 값을 선택했을 때 발생하는 이벤트이다. 

아래와 같은 정보를 받아볼 수 있다.

 

이 중에서 내가 필요한 건 표시한 address와 zonecode 이니 둘을 가져오는 함수를 만들어 보도록 하자

 

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

export default function Address({ inputZipCode, inputDetailAddress, inputExtraAddress }) {
    const [isOpen, setIsOpen] = useState(false);
    const [zipCode, setZipCode] = useState("");
    const [detailAddress, setDetailAddress] = useState("");

    const completeHandler = (data) => {
        const { address, zonecode } = data;
        
        // 상태 업데이트
        setZipCode(zonecode);
        setDetailAddress(address);
        
        //부모 컴포넌트로 전달
        inputZipCode(zonecode);
        inputDetailAddress(address);
        
        setIsOpen(false);
    } 
}
    return (
        <>
            <div>주소</div>
            <div>우편번호</div>
            <input
                id="zipcode"
                type="number"
                value={zipCode}
                disabled
            />
            <button type="button" onClick={zipcodeButton}>주소 찾기</button>
            {isOpen && (
                <div style={postCodeStyle}>
                    <button
                        type="button"
                        onClick={() => setIsOpen(false)}
                    >
                        X
                    </button>
                    <DaumPostcode
                        onComplete={completeHandler}
                        onClose={closeHandler}
                    />
                </div>
            )}
            <div>기본주소</div>
            <input
                id="detailAddress"
                type="text"
                value={detailAddress}
                disabled
            />
            <div>상세주소</div>
            <input
                id="extraAddress"
                type="text"
                onChange={(event) => inputExtraAddress(event.target.value)}
                placeholder="상세주소를 입력하세요(선택)"
            />
        </>
    )

 

 

3. 확인하기

 

css도 따로 손 보아 팝업 형태로 띄우게 했다.