Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ksw_devlog

TIL 11주 3일차-react native project 본문

TIL

TIL 11주 3일차-react native project

kimcoach 2023. 1. 11. 20:22

리뷰 삭제, 수정

-> ReviewEdit.jsx

deleteDoc, updataDoc, useMutation 등 이용하였다.

 
export default function ReviewEdit({
  navigation,
  route: {
    params: { review, from },
  },
}) {
  const [newratings, setNewratings] = useState(0);
  const [newContents, setNewContents] = useState('');
  const isDark = useColorScheme();

  const deleteReview = async (id) => {
    await deleteDoc(doc(dbService, 'reviews', id));
  };

  const editReview = async (id) => {
    await updateDoc(doc(dbService, 'reviews', id), {
      rating: newratings,
      contents: newContents,
    });
  };
 
-> useMutation 쿼리함수에 들어갈 삭제 / 수정 함수를 만들어준다
 
 
const { mutate: removeReview } = useMutation(
    ['deleteReview', review.id],
    (body) => deleteReview(body),
    {
      onSuccess: () => {
        console.log('삭제성공');
      },
      onError: () => {
        console.log('err in delete:', err);
      },
    }
  );
  const { mutate: reviseReview } = useMutation(
    ['editReview', review.id],
    (body) => editReview(body),
    {
      onSuccess: () => {
        console.log('수정성공');
      },
      onError: () => {
        console.log('err in edit:', err);
      },
    }
  );

-> removeReview, reviseReview로 삭제 및 수정함수 작명 + 예외처리

 

const onDelete = async () => {
    Alert.alert('리뷰 삭제', '정말 삭제하시겠습니까?', [
      {
        text: '취소',
        style: 'cancel',
      },
      {
        text: '삭제',
        style: 'destructive',
        onPress: async () => {
          try {
            await removeReview(review.id);
            if (from === 'MusicalDetail') {
              navigation.navigate('MusicalDetail', {
                musicalId: review.musicalId,
              });
            } else if (from === 'Mypage') {
              navigation.navigate('Tabs', { screen: 'Mypage' });
            }
          } catch (err) {
            console.log('err:', err);
          }
        },
      },
    ]);
  };
  const onEdit = () => {
    if (!newratings && !newContents) {
      alert('수정한 부분이 없습니다.');
      return;
    }

    let editObj = {};
    if (newratings) {
      Object.assign(editObj, { rating: newratings });
    }
    if (newContents) {
      Object.assign(editObj, { contents: newContents });
    }
    Alert.alert('리뷰 수정', '이대로 리뷰 수정하시겠습니까?', [
      { text: '취소', style: 'cancel' },
      {
        text: '수정',
        style: 'default',
        onPress: async () => {
          try {
            await reviseReview({ id: review.id, editObj });
            setNewContents('');
            setNewratings(0);
            if (from === 'MusicalDetail') {
              navigation.reset({
                index: 1,
                routes: [
                  {
                    name: 'MusicalDetail',
                    params: { musicalId: review.musicalId },
                  },
                  {
                    name: 'ReviewDetail',
                    params: { review: { ...review, ...editObj }, from },
                  },
                ],
              });
            } else if (from === 'MyPage') {
              navigation.reset({
                routes: [
                  {
                    name: 'Tabs',
                    params: { screen: 'MyPage' },
                  },
                ],
              });
            }
          } catch (err) {
            console.log('err:', err);
          }
        },
      },
    ]);
  };

-> 리뷰 수정 함수 : 빈 객체를 생성 후 수정할 내용을 Object, assign을 이용하여 빈 객체에 담아준다.

 

      <EditButton
        style={{ opacity: !newContents && !newratings ? 0.1 : 1 }}
        disabled={!newContents && !newratings}
        onPress={onEdit}
      >
        <BtnTitle disabled={!newContents && !newratings}>수정하기</BtnTitle>
      </EditButton>
      <DeleteBtn onPress={onDelete}>
        <DeleteBtnTitle>삭제하기</DeleteBtnTitle>
      </DeleteBtn>

 

 

'TIL' 카테고리의 다른 글

TIL 11주 5일차 - React Native project 회고  (0) 2023.01.13
TIL 11주 4일차-react native project  (0) 2023.01.12
TIL 11주 2일차-react native project  (0) 2023.01.10
TIL 11주 1일차-react native project  (0) 2023.01.09
WIL 10주차  (0) 2023.01.08