2023.09.08
트러블 슈팅
게시물 작성 버튼을 연속으로 누르면 똑같은 게시물이 여러번 작성되는 문제가 있었습니다.
처음에는 디바운싱을 적용하려고 했습니다. 하지만 게시물을 서버에 POST 요청을 보내는 시간과 디바운싱의 딜레이 시간을 매번 계산할 수는 없기에 부적합하다고 생각했습니다.
POST 요청에 걸리는 시간을 로딩으로 유저에게 알려주고, 그 시간 동안은 게시물을 작성하지 못하게 막는 방법을 선택하게 되었습니다.
const [disable, setDisable] = useState(false);
const mutation = useMutation(insertPost, {
onSuccess: async () => {
queryClient.invalidateQueries(['partnerPost']);
navigate('/partner');
},
// 에러가 나면 버튼 다시 활성화
onError: () => {
AlertError({});
setDisable(false);
},
});
const handleWriteClick = () => {
// 버튼 클릭 시 비활성화
setDisable(true);
mutation.mutate(dataToInsert);
};
<button type="button" disabled={disable} onClick={handleWriteClick}>
작성완료
</button>
// 버튼 클릭 시 로딩
{disable && <LoadingSpinner />}
Quill에서 base64로 변환된 이미지의 용량이 너무 커서 supabase의 서버가 무리가 간다. 이미지 핸들러로 이미지를 supabase storage에 담아 URL로 바꾸자.