23.08.07
오늘 한 일
- TS 스터디
- zustand 질문 답변
- 카공실록 리뷰 작성 api 연결
🤔연속적인 mutation 처리?
서버에 이미지 업로드 -> 이미지 id 배열 받음 -> 리뷰 요청 시 이미지 id 배열을 같이 보내야 함
첫 시도
mutate -> onSucess -> mutate
const { mutate: postReviewMutate } = usePostReviewMutation(placeId);
const { mutate: uploadImagesMutate } = useImagesUpload();
const handlePostReviewClick = () => {
uploadImagesMutate({
files: images,
folderName: 'review'
},
{
onSuccess: (data) => {
const imageIds = data.map((image) => image.id);
postReviewMutate({ ...review, imageIds });
},
});
};
뭔가 복잡해 보인다.. 다른 방법을 찾아보았다.
두 번째 시도
mutateAsync -> mutate
const { mutateAsync: postReviewMutateAsync } = usePostReviewMutation(placeId);
const { mutate: uploadImagesMutate } = useImagesUpload();
const handlePostReviewClick = async () => {
const imageIds = await uploadImagesMutateAsync({
files: images,
folderName: 'review',
}).then(({ images }) => images.map((image) => image.id));
postReviewMutateAsync({ ...review, imageIds });
};
분리되어 있어 가독성은 좋아졌다. 하지만 이게 나은 방법인지는 잘 모르겠다.
TS 스터디 종료
책을 가지고 오프라인으로 만나 같이 읽는 방식으로 진행했는데, 금방 끝났다. 책 자체가 타입스크립트 입문서이다보니 심화적인 부분은 많이 생략되어있었다.
새로 알게된 것 - Mapping Modifiers
type Concrete<Type> = {
[Property in keyof Type]-?: Type[Property];
};
type MaybeUser = {
id: string;
name?: string;
age?: number;
};
type User = Concrete<MaybeUser>;
// type User = {
// id: string;
// name: string;
// age: number;
// }
-?
를 사용하면 ?
가 붙은 속성을 제거할 수 있다. +?
는 ?
와 같다. ?
뿐만 아니라 readonly
도 제거할 수 있다.
type CreateMutable<Type> = {
-readonly [Property in keyof Type]: Type[Property];
};
type LockedAccount = {
readonly id: string;
readonly name: string;
};
type UnlockedAccount = CreateMutable<LockedAccount>;
// type UnlockedAccount = {
// id: string;
// name: string;
// }
내일 할 일
- 카공실록 개발