@@ -4,7 +4,7 @@ import { Box, Divider, Typography } from "@mui/material";
44import SelectorCard from "./SelectorCard";
55import SelectorRadio from "./SelectorRadio";
66import SelectorTarget from "./SelectorTarget";
7- import { useState, useEffect, useCallback } from "react";
7+ import { useState, useEffect, useCallback, useRef } from "react";
88import { calculateAge } from "@/utils/calculateAge";
99import dayjs from "dayjs";
1010import { genderLabel, gradeLabel } from "@/types/IMember";
@@ -91,6 +91,16 @@ export default function ElderSurveyCard({
9191 hasDiscomfort: elder.hadTrouble ? "yes" : "none",
9292 parts: elder.troubleParts ?? [],
9393 });
94+ const [isMounted, setIsMounted] = useState(false);
95+
96+ // 부모가 바뀔 때만 실행되도록 함.
97+ const lastPresetAtt = useRef<Scale | undefined>(presetAtt);
98+ const lastPresetAbl = useRef<Scale | undefined>(presetAbl);
99+ const lastPresetTrouble = useRef<PresetTrouble | undefined>(presetTrouble);
100+
101+ useEffect(() => {
102+ setIsMounted(true);
103+ }, []);
94104
95105 const { isPhone, isTablet } = useMedia();
96106 const infoVariant = isPhone
@@ -128,21 +138,28 @@ export default function ElderSurveyCard({
128138 );
129139
130140 useEffect(() => {
131- if (presetAtt) {
141+ if (presetAtt && presetAtt !== lastPresetAtt.current) {
142+ lastPresetAtt.current = presetAtt;
132143 setAtt(presetAtt);
133144 bubble({ attitudeScore: scoreOf[presetAtt] });
134145 }
135146 }, [presetAtt, bubble]);
136147
137148 useEffect(() => {
138- if (presetAbl) {
149+ if (presetAbl && presetAbl !== lastPresetAbl.current) {
150+ lastPresetAbl.current = presetAbl;
139151 setAbl(presetAbl);
140152 bubble({ abilityScore: scoreOf[presetAbl] });
141153 }
142154 }, [presetAbl, bubble]);
143155
144156 useEffect(() => {
145- if (presetTrouble) {
157+ if (
158+ presetTrouble &&
159+ (presetTrouble.hasDiscomfort !== lastPresetTrouble.current?.hasDiscomfort ||
160+ presetTrouble.parts !== lastPresetTrouble.current?.parts)
161+ ) {
162+ lastPresetTrouble.current = presetTrouble;
146163 setTrouble(presetTrouble);
147164 bubble({
148165 hadTrouble: presetTrouble.hasDiscomfort === "yes",
@@ -174,7 +191,11 @@ export default function ElderSurveyCard({
174191 </Box>
175192 <Box sx={{ display: "flex", gap: 2, mt: 1 }}>
176193 <Typography variant={infoVariant}>
177- {calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })}
194+ {isMounted
195+ ? calculateAge(dayjs(elder.birthDate), {
196+ format: "YYYY-MM-DD",
197+ })
198+ : ""}
178199 </Typography>
179200 <Typography variant={infoVariant}>
180201 {genderLabel[elder.gender]}
@@ -189,7 +210,9 @@ export default function ElderSurveyCard({
189210 <ProfileIcon sx={{ fontSize: 24 }} />
190211 <Typography variant={infoVariant}>{elder.name}</Typography>
191212 <Typography variant={infoVariant}>
192- {calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })}
213+ {isMounted
214+ ? calculateAge(dayjs(elder.birthDate), { format: "YYYY-MM-DD" })
215+ : ""}
193216 </Typography>
194217 <Typography variant={infoVariant}>
195218 {genderLabel[elder.gender]}
0 commit comments