-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
💡TILToday I LearnToday I Learn
Description
📌 배운 내용
useRevalidator()를 통해서useLoaderData()같은 한 번 밖에 불러올 수 없는 데이터라도 해당 데이터를 새로고침하여 최신화 되는 것처럼 보이게 할 수 있다는 것을 알게 되었습니다.
🔍 배경 / 문제 상황
const {donations} = useLoaderData();
- 캐러셀과 후원 모달에서 데이터를
useLoaderData()를 통해 받아오고 있었는데, 해당 데이터는loader에서 단 한 번만 불러오기 때문에 이후 갱신이 어려웠습니다. - 하지만 시간 상의 문제와 CRUD 로직에 대한 이해 부족으로 인해 기존 데이터를 다시 불러오는 방식 대신 새로고침처럼 보이게 처리하는 방향으로 변경했습니다.
✅ 핵심 정리 / 해결 방법
const revalidator = useRevalidator();
//...
const handleClick = async () => {
const donateAmountNum = Number(donateAmount);
setIsDonating(true);
try {
await requestPut(ENDPOINTS.CONTRIBUTE_DONATION(data.id), {
amount: donateAmountNum,
});
const total = prevCredit - donateAmountNum;
localStorage.setItem('selectedCredit', total);
updateCredit(total);
showAlert('후원 완료!', 'success');
setTimeout(() => {
onClose();
revalidator.revalidate(); //revalidate()를 사용하여 해당 데이터를 다시 로
}, 700);
} catch (e) {
showAlert('투표에 실패했습니다.', 'warning');
console.error('후원 처리 중 오류 발생', e);
} finally {
setIsDonating(false);
}
};
- 테스트를 해보니 새로고침을 하면 최신 상태로 반영되는 것을 확인했지만 처음에는 전체 페이지가 새로고침 되면 사용자 경험이 떨어지기 때문에 다른 대안을 좀 더 찾기 시작했습니다.
- 그러
react-router에서useRevalidator라는 훅이 존재하였고revalidator.revalidate();를 사용하여loader에서 처리 되는 데이터를 다시 요청할 수 있는 것을 확인했습니다. const {donations} = useLoaderData();해당 함수는 나만 사용하고 있기 때문에 현재 상황을 해결할 수 있는 적합한 방법으로 판단
🧠 느낀점 또는 생각 메모
- 시간이 부족하기도 했었고 CRUD에 대한 이해력이 부족해 발생한 문제라고 생각한다. 이 문제는 추후 리팩토링으로 스스로 해보고 싶다.
- 하지만 이러한 상황에서도 빠르게 처리할 수 있는 부분이 있었고 이런 여러 예외 상황을 대비하기 위해서 개발자들 분들이 굉장히 신경을 많이 쓰면서 개발한다는 점을 알게 되었다.
📚 래퍼런스
Metadata
Metadata
Assignees
Labels
💡TILToday I LearnToday I Learn