Learn/Today I Learn

TIL # 53 < React Native 10 - 리뷰 CRUD >

미래개발자 2023. 1. 14. 22:21
728x90

  개발/공부 진행 및 완료상황, 무엇을 더 하면 좋을지

 

React Native 팀 프로젝트 진행

 

  오늘 새로 배운 내용

 

📖영화 리뷰 Read

// My 탭 화면 리스트 Read 로직
useFocusEffect(useCallBack(()=>{
	const q = query(
        collection(dbService, "reviews"),
        orderBy("createdAt", "desc"),
        where("userId", "==", authService.currentUser?.uid)
      );
      const unsubcribe = onSnapshot(q, (snapshot) => {
        const newReviews = snapshot.docs.map((doc) => ({
          id: doc.id,
          ...doc.data(),
        }));
        setReviews(newReviews);
      });
      return unsubcribe;
}, []))

 

📌영화 리뷰 Update

// React-Query의 useMutation (DB에 추가/수정/삭제 발생시킬 때 사용하는 hook)
const { isLoading: isLoadingEditing, mutate: reviseReview } = useMutation(
    ["editReview", review.id],
    (body) => editReview(body),
    {
      onSuccess: () => {
        console.log("수정성공");
      },
      onError: (err) => {
        console.log("err in edit:", err);
      },
    }
  );

 

🔥영화 리뷰 Delete

// 출처(My탭 or Detail화면) -> 리뷰 상세화면 -> 리뷰 수정 화면에서 삭제 시
// 리뷰 상세화면으로 진입했던 출처를 알아야 삭제 후 화면을 어디로 이동시킬 지 결정할 수 있음

// My탭 또는 Detail 화면에 있는 리뷰 상세화면 이동 함수
const goToReview = () => {
    navigate("Review", {
      review,
      from: "Detail",
    });
  };

// 리뷰 수정 화면에서의 삭제함수
const onDelete = async () => {
    Alert.alert("리뷰 삭제", "정말 현재 리뷰를 삭제하시겠습니까?", [
      { text: "cancel", style: "destructive" },
      {
        text: "OK. Delete it.",
        onPress: async () => {
          try {
            // await deleteDoc(doc(dbService, "reviews", review.id));
            await removeReview(review.id);
            if (from === "Detail") {
              navigation.navigate("Detail", { movieId: review.movieId });
            } else if (from === "My") {
              navigation.navigate("Tabs", { screen: "My" });
            }
          } catch (err) {
            console.log("err:", err);
          }
        },
      },
    ]);
  };

 

 

728x90