화면에서 보여지는 trips 배열의 구조를 분석해 보면, 배열의 각 요소는 trip 객체로 이루어져 있습니다. trip 객체는 여러 가지 속성들을 포함하고 있으며, 대표적으로는 다음과 같은 구조를 가지고 있습니다:
[ { author: { email: "a@a.com", // 이메일 주소 name: "이메일", // 작성자 이름 gender: "MALE", // 성별 role: "USER" // 역할 }, authorId: 18, // 작성자 ID createdAt: "2024-09-24T04:16:42.351Z", // 생성 날짜 id: 144, // trip ID reservations: [], // 예약 목록 (현재는 비어 있음) title: "경북대 -> 동대구역 택시 2024-09-24 13:16 동성 2인", // 제목 updatedAt: "2024-09-24T01:21:56.712Z", // 수정 날짜 },
{ author: { email: "b@b.com", name: "홍길동", gender: "MALE", role: "USER" }, authorId: 5, createdAt: "2024-09-23T09:49:54.391Z", id: 140, reservations: [], title: "칠곡운암역 -> 동대구역 택시 2024-09-24 12:49 성별무관 4인 일정 모집중", updatedAt: "2024-09-23T09:49:54.391Z" }, ... ]
배열 구조 설명:
- author: 작성자에 대한 정보가 포함된 객체로, 이메일, 이름, 성별, 역할 등의 세부 정보가 들어 있습니다.
- authorId: 작성자의 고유 ID.
- createdAt: 트립이 생성된 날짜와 시간.
- id: 해당 트립 객체의 고유 ID.
- reservations: 예약 정보를 담고 있는 배열입니다. 현재는 빈 배열로 되어 있습니다.
- title: 트립의 제목으로, 출발지와 도착지, 날짜, 시간 등의 정보가 포함된 문자열입니다.
- updatedAt: 트립이 마지막으로 수정된 날짜와 시간.
이러한 구조에서 trips.map(trip => trip.author.email)과 같은 코드를 사용하면, trips 배열에서 각 trip 객체의 작성자 이메일만을 추출할 수 있습니다.
실제사용
import { useState, useEffect } from "react";
import axios from "../api/axios.js";
export function Main() {
// ... 기존 상태들 ...
const [currentUserEmail, setCurrentUserEmail] = useState(null);
useEffect(() => {
fetchCurrentUser();
fetchTrips();
}, []);
useEffect(() => {
if (currentUserEmail && trips.length > 0) {
logMyTrips();
}
}, [currentUserEmail, trips]);
const fetchCurrentUser = async () => {
try {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('인증 토큰이 없습니다.');
}
const response = await axios.get('/users/me', {
headers: { Authorization: token }
});
setCurrentUserEmail(response.data.data.email);
} catch (error) {
console.error('현재 사용자 정보를 가져오는 데 실패했습니다:', error);
}
};
const fetchTrips = async () => {
setIsLoading(true);
setError(null);
try {
const response = await axios.get('/posts/gets');
console.log('서버에서 받은 데이터:', response.data);
if (response.data && Array.isArray(response.data.data)) {
setTrips(response.data.data);
} else {
throw new Error('서버에서 받은 데이터 구조가 예상과 다릅니다.');
}
} catch (error) {
console.error('포스팅 데이터를 가져오는 데 실패했습니다:', error);
setError(error.message || '데이터를 불러오는 데 실패했습니다.');
} finally {
setIsLoading(false);
}
};
const logMyTrips = () => {
const myTrips = trips.filter(trip => trip.author.email === currentUserEmail);
console.log('현재 사용자의 이메일:', currentUserEmail);
console.log('사용자가 작성한 글:', myTrips);
};
// ... 기존 다른 함수들 ...
return (
<div id="Main">
{/* ... 기존 JSX ... */}
<div className="cnt_board">
{filteredTrips.map((trip, index) => (
<div key={trip.id || index} className="card" onClick={() => handleEditClick(trip)}>
{/* ... 기존 카드 내용 ... */}
</div>
))}
</div>
</div>
);
}
'프로젝트' 카테고리의 다른 글
프로젝트>카풀 _ 보완점 (9) | 2024.09.03 |
---|---|
프젝)체크리스트+메모장+캘린더 (0) | 2024.08.30 |
프로젝트 > OTT 업데이트 (0) | 2024.08.24 |
간단 게임>비행기 (0) | 2024.08.13 |
프로젝트> ott 로그인버튼 (0) | 2024.08.12 |