Project/[Team]외국인 관광객을 위한 카드 플랫폼

[Spring Boot/React] 다음 주소 api 연결하기

dbfl9911 2024. 8. 24. 15:24
반응형

- 주소 api 연결 리액트 코드 

import React, { useEffect } from 'react';
import { Field } from 'formik';

const DaumPostcode = ({ setFieldValue }) => {
    useEffect(() => {
        const script = document.createElement('script');
        script.src = "https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
        script.async = true;
        document.body.appendChild(script);

        return () => {
            document.body.removeChild(script);
        };
    }, []);

    const handleComplete = (data) => {
        let fullAddress = data.address;
        let extraAddress = '';

        if (data.addressType === 'R') {
            if (data.bname !== '') {
                extraAddress += data.bname;
            }
            if (data.buildingName !== '') {
                extraAddress += (extraAddress !== '' ? `, ${extraAddress}` : data.buildingName);
            }
            fullAddress += (extraAddress !== '' ? ` (${extraAddress})` : '');
        }

        setFieldValue("address", fullAddress);  // 기본 주소를 Formik의 Field 값으로 설정
        setFieldValue("detailAddress", ""); // 상세 주소 초기화
    };

    const handleClick = () => {
        new window.daum.Postcode({
            oncomplete: handleComplete,
        }).open();
    };

    return (
        <div>
            <button type="button" onClick={handleClick}
             style={{ marginBottom: '20px', padding: '10px', backgroundColor: '#007BFF', color: 'white', border: 'none', borderRadius: '5px',
                display: 'flex', justifyContent: 'flex-start'
              }}>
                주소 검색
            </button>
            <Field
                id="address"
                name="address"
                className="form-control"
                style={{
                    padding: '12px 12px 8px 12px',
                    fontSize: '14px',
                    color: '#333',
                    borderColor: '#ced4da',
                    marginBottom: '12px'
                }}
                placeholder="기본 주소"
            />
            <Field
                id="detailAddress"
                name="detailAddress"
                className="form-control"
                style={{
                    padding: '12px 12px 8px 12px',
                    fontSize: '14px',
                    color: '#333',
                    borderColor: '#ced4da',
                }}
                placeholder="상세 주소"
            />
        </div>
    );
};

export default DaumPostcode;

 

 

반응형