Closed jellyjoji closed 9 months ago
Location 컴포넌트의 아래 useEffect 훅 함수는 data 상태가 변경된 이후 다음 렌더링에서 실행됩니다. 하지만 페이지가 전환되면 Location 컴포넌트가 언마운트(unmount)되므로 함수는 실행되지 않습니다.
즉, 아래처럼 코드를 작성하면 안됩니다.
// ❌ 아래처럼 코드를 작성하면 안됩니다.
// useEffect(() => {
// updateCreateRoomForm('meetingPoint', data);
// }, [data]);
useEffect 훅 내부의 Kakao 지도 API의 클릭 이벤트 핸들러 내부에서 Location 컴포넌트의 상태 업데이트 요청할 때, 앱의 전역 상태 또한 업데이트 요청하세요. 로컬 상태는 Location 페이지 컴포넌트에서 화면에 렌더링 할 주소 정보이고, 앱 상태인 폼 데이터는 CreateRoom 페이지 컴포넌트에서 기억되어 사용될 주소 정보입니다.
kakao.maps.event.addListener(map, 'click', function (mouseEvent) {
searchDetailAddrFromCoords(mouseEvent.latLng, function (result, status) {
if (status === kakao.maps.services.Status.OK) {
let detailAddr = !!result[0].address.address_name
? result[0].address.address_name
: '위치정보를 불러올수없음';
// Location 컴포넌트 상태 업데이트
setData(detailAddr);
// 앱 상태(전역, 페이지 전환 시에도 기억 됨) 업데이트
**updateCreateRoomForm('meetingPoint', detailAddr);**
const content = '<div className="bAddr">' + detailAddr + '</div>';
marker.setPosition(mouseEvent.latLng);
marker.setMap(map);
infowindow.setContent(content);
infowindow.open(map, marker);
}
});
});
내용
Kakao Map 에서 찍은 주소값을 updateCreateRoomForm 에 pickUp 항목으로 저장시켰습니다, 해당 페이지를 벗어나도 vlaue 값이 기억되도록
useState(value)
를 주고value=createRoomForm.meetingPoint}
를 CreateRoom 의 MeetingPorint컴포넌트에 적용시켰습니다. value 값을 기억해야할때 를 적용시킬 속성의 위치가 여기가 맞을까요 ? (굵은 글자 표시)Location.jsx 의 전체 코드를 공유합니다.
※ 댓글에 이슈 해결 완료 후 결과 또는 해결 과정 이미지 첨부