기존에 커스텀훅으로 로직을 분리했었는데 한번더 리팩토링을 진행했다
Promise.all
를 사용해 병렬로 처리함 try {
const supabase = createClient();
const formData = await request.formData();
const title = formData.get('title') as string;
const description = formData.get('description') as string;
const language = JSON.parse(formData.get('language') as string);
const images = formData.getAll('images') as File[];
const uploadedImageUrls = await Promise.all(images.map(image => uploadImageAndGetUrl(supabase, image)));
const { error } = await supabase.from('Request Posts').insert([
{
user_id: crypto.randomUUID(),
title,
content: description,
lang_category: language,
price: '0',
post_img: uploadedImageUrls
}
]);
request.formData()
로 폼 데이터를 호출함Promise.all()
을 사용하여 모든 업로드 작업이 완료될 때 까지 기다림 try {
const formData = new FormData()
formData.append('title', title)
formData.append('description', description)
formData.append('language', JSON.stringify(language))
images.forEach((image) => {
formData.append('images', image)
})
const response = await fetch('/api/createCard', {
method : 'POST',
body : formData
})
if (response.ok) {
alert('게시글이 작성되었습니다 !')
setTitle('')
setLanguage([])
setImages([])
setDescription('')
new FormData()
로 새로운 폼 데이터 객체를 생성함원래는 types/
폴더안에 파일을 하나 만들어 props 타입들을 지정해주고 import하는 방식으로 코드를 만들었다.
하지만 props들이 각 컴포넌트에서만 사용되기 때문에 굳이 파일 분리를 할 필요가 없다고 피드백을 받았다. 그래서 파일을 삭제하고 각 컴포넌트에서 props 타입을 지정해줬다.
interface DescriptionInputProps {
description : string
setDescription : (description : string) => void
}
export default function DescriptionInput({description, setDescription} : DescriptionInputProps) {
return (
<div className="border-2 border-slate-400 mb-[20px] rounded-md">
<textarea
name="text"
id="text"
className="w-full h-[500px] p-5"
value={description}
onChange={(e) => setDescription(e.target.value)}
></textarea>
</div>
)
}