2월 16일 추가된 내용
이하는 이전 작성 내용
원인 : 서버에서 넘어오는 데이터에는 투표가 끝나는 closedAt 날짜만 있고 이 투표가 종료됐는지 종료되지 않았는지 상태는 표시되어있지 않았다. 프론트에서 이 부분을 계산해서 투표의 종료/진행중을 전역상태로 만들어줘야 했는데 이 과정에서 데이터를 어떻게 처리할 것인지 고민하게 되었다.
선택해야하는 부분
결과
const _promise = (params: string): any => {
return new Promise(function (resolve, reject) {
if (params.length === 0) {
resolve(true);
} else {
resolve(false);
}
});
};
useEffect(() => {
// ...생략
const dday = CalcDday(res.data.closedAt);
console.log(res.data);
_promise(dday).then((response: boolean) => {
dispatch(
getCurrent({
isAuthor: res.data.isAuthor,
isVoted: res.data.isVoted,
isClosed: response,
}),
);
문제는 페이지 로딩시간이 길어진다는 점이었다. 새로고침을 한 뒤 로딩 컴포넌트가 보이는 시간이 길어서 코드를 동기적 처리로 수정하고 값이 정확하게 들어오는지 확인해봤다
데이터가 잘 들어오는 것을 확인하고 코드를 최종적으로 다음과 같이 수정하였다.
//api요청
useEffect(() => {
//...생략
const dispatchCurrentObj = {
isAuthor: res.data.isAuthor,
isVoted: res.data.isVoted,
};
const dday = CalcDday(res.data.closedAt);
if (dday.length === 0) {
dispatch(
getCurrent({
...dispatchCurrentObj,
isClosed: true,
}),
);
} else {
dispatch(
getCurrent({
...dispatchCurrentObj,
isClosed: false,
}),
);
}
// redux
const { isClosed, isAuthor, isVoted } = useSelector((state: any) => state.currentVote);