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주 2일차-react native project 본문

TIL

TIL 11주 2일차-react native project

kimcoach 2023. 1. 10. 23:11

리뷰 작성 및 읽어오기

 

firebase를 이용하여 리뷰 작성하는 기능을 구현하기로 했다.

 

 

// C - 생성

 
    const [modalContent, setModalContent] = useState('');
    const [ratings, setRatings] = useState(0);
    const getRatings = (rating) => { setRatings(rating) };
    const addReview = async () => {
        //addDoc을 이용해서 내가 원하는 collection에 내가 원하는 key로 값을 추가
        await addDoc(collection(dbService, 'reviews'), {
            contents: modalContent,
            createdAt: Date.now(),
            rating: ratings,
            userId: authService.currentUser?.uid,
            writer: authService.currentUser?.displayName ?? '닉네임없음',
            musicalId,
        });
        setIsOpenModal(false);
        setModalContent('');
        setRatings(0);
    };

-> reviews 라는 이름으로 컬렉션 생성 후 리뷰 내용 / 작성시간 / 별점 / 뮤지컬 ID / 작성자 닉네임 등 추가

 

파이어스토어에 추가된 모습 :

 

 

 

// R- 데이터 읽어오기

export default function ReviewsPart({ musicalId }) {
  const [isOpenModal, setIsOpenModal] = useState(false);
  const [reviews, setReviews] = useState([]); // reviews 추가, 삭제 state
  const { navigate } = useNavigation();

  const addreview = () => {
    const isLogin = !!authService.currentUser;
    if (!isLogin) {
      navigate('Login');
      return;
    }
    setIsOpenModal(true);
  };

  useEffect(() => {
    const reviewsCollectionRef = collection(dbService, 'reviews');
    const q = query(
      reviewsCollectionRef,
      where('musicalId', '==', musicalId),
      orderBy('createdAt', 'desc')
    );
    const getReviews = onSnapshot(q, (snapshot) => {
      const newReviews = snapshot.docs.map((doc) => ({
        id: doc.id,
        ...doc.data(),
      }));
      setReviews(newReviews);
    });
    return getReviews;
  }, []);

-> 'reviews' 콜렉션에서 props로 받아온 musicalID랑 같은 뮤지컬 아이디를 포함하는 데이터를 최신순으로 불러온다. (query, where, orderBy 메소드 이용)

 

firebase onSnapshot 이라는 메소드를 통해 실시간 데이터를 가져온다

=> 데이터를 가져온 후 바로 최신화 시켜주는 메소드

 

 

'TIL' 카테고리의 다른 글

TIL 11주 4일차-react native project  (0) 2023.01.12
TIL 11주 3일차-react native project  (0) 2023.01.11
TIL 11주 1일차-react native project  (0) 2023.01.09
WIL 10주차  (0) 2023.01.08
TIL 10주 5일차-React Native Project  (0) 2023.01.06