console.log(combinedData); 찍으니 이제 date별로 data가 나오게 되었다.
하지만 각자 속성이 다른 계좌 데이터와 현금 데이터...
리턴문으로 렌더링할때 조금 신경을 써줘야 했다
export default function MonthConsumptionDetail({
combinedData,
}: {
combinedData: CombinedData[];
}) {
const detailBoxRef = useRef<HTMLDivElement>(null);
useEffect(() => {
if (detailBoxRef.current) {
const itemCount =
combinedData?.reduce(
(height, group) => height + group.data.length,
0
) || 0;
const 날짜갯수 = combinedData.length;
const calculatedHeight = (itemCount + 날짜갯수 * 2 - 7) * 5;
detailBoxRef.current.style.height = `${calculatedHeight}vh`;
//console.log(itemCount)
}
}, [combinedData]);
return combinedData.length === 0 ? (
<없다>소비 내역이 없습니다.</없다>
) : (
<ConsumptionDetailBox ref={detailBoxRef}>
{combinedData.map((group, index) => (
<ConsumptionDetailContainer key={index}>
<DateContainer>{parseInt(group.date.split("-")[2])}일</DateContainer>
{group.data.map((item) => renderItem(item))}
{/* <DayItem>
<NameContainer>
<img src={dot} alt="icon" />
<div className="title">{item.}</div>
</NameContainer>
<PriceContainer>
<div className="price">{item.}</div>
<div className="source">{item.}</div>
</PriceContainer>
</DayItem>*/}
</ConsumptionDetailContainer>
))}
</ConsumptionDetailBox>
);
}
function renderItem(item: CombinedItem) {
if ("bankName" in item) {
//계좌 데이터 처리
return (
<DayItem>
<NameContainer>
<img src={dot} alt="icon" />
<div className="title">{item.paymentResponse.purpose}</div>
</NameContainer>
<PriceContainer>
<div className="price">{item.paymentResponse.amount}</div>
<div className="source">{item.bankName}</div>
</PriceContainer>
</DayItem>
);
} else {
return (
<DayItem>
<NameContainer>
<img src={dot} alt="icon" />
<div className="title">{item.purpose}</div>
</NameContainer>
<PriceContainer>
<div className="price">{item.amount}</div>
<div className="source">{item.paymentType}</div>
</PriceContainer>
</DayItem>
);
}
}
방법은 renderItem이라는 함수로 따로 빼서,
특정 속성이 있는 경우와 없는 경우로 나누어서
리턴문을 다르게 작성하는 것이다 ^^
이렇게 처리하면 데이터의 속성이 일치하지 않아도
화면상에 같은 구성으로 렌더링 할 수 있다..
'typescript' 카테고리의 다른 글
함수와 타입 (2) | 2023.06.01 |
---|---|
타입스크립트 이해하기 (0) | 2023.05.31 |
타입스크립트 기본2 (타입별칭, 인덱스 시그니처, Enum, Any, Unknown, Void, Never 타입) (0) | 2023.05.31 |
타입스크립트 기본(원시타입, 비원시타입, 리터럴 타입) (0) | 2023.05.31 |
타입스크립트의 점진적 타입시스템 (0) | 2023.05.31 |