언어 공부/Firebase

[Firebase] nwitter 트위터 클론코딩

수기 2022. 6. 6. 18:44

https://nomadcoders.co/nwitter/lectures/1922

 

All Courses – 노마드 코더 Nomad Coders

초급부터 고급까지! 니꼬쌤과 함께 풀스택으로 성장하세요!

nomadcoders.co

 

Collection - 폴더

Document - 문서, 파일

 

Snapshot은 데이터베이스의 변화를 실시간으로 알려줌. 

 

 

데이터를 가져오는 방법

fbase.js

import "firebase/compat/firestore";
export const dbService = firebase.firestore();

Home.js

 useEffect(() => {
        
        dbService.collection("nweets").onSnapshot(snapshot => {
            const nweetArray =  snapshot.docs.map(doc => ({
                id:doc.id,
                ...doc.data(),
            }));
            setNweets(nweetArray)
        })
    
    }, [])
"nweets" 는 collection 이름, 해당 collection의 snapshot을 통해 firestore의 데이터를 가져오는 방법.
 
 
옛날 방식
  const dbnweets = await dbService.collection("nweets").get();
        dbnweets.forEach((document) => {

            const nweetObject = {
                ...document.data(),
                id: document.id,
            }

            setNweets((prev) => [nweetObject, ...prev])
    })
 
 
 
 
 
 
 
 
 
 데이터를 필터링해서 가져오는 방법  
const nweets = await dbService.collection("nweets").where("creatorId", "==", userObj.uid).get();​

 

1) 오름차순(Default)

   const nweets = await dbService
        .collection("nweets")
        .where("creatorId", "==", userObj.uid)
        .orderBy("createdAt") // 정렬 추가(기본 오름차순)
        .get();
기본(오름차순)

2) 내림차순

const nweets = await dbService
        .collection("nweets")
        .where("creatorId", "==", userObj.uid)
        .orderBy("createdAt", "desc") // 내림차순
        .get();

 에러 메시지

더보기

 정렬 시, 아래 오류가 뜬다. firebase는 noSQL 이기 때문에 index가 필요. 해당 사이트 들어가서 index를 만들어주면 문제 없이 실행 가능하다.

 

 

 

 

const Nweet = ({ nweetObj, isOwner }) => {
    <div>
        <h4>{nweetObj.text}</h4>
        {isOwner && (
        <>
        <button>Delete Nweet</button>
        <button>Edit Nweet</button>
        </>
        )}
    </div>
};

 

=> 해당 코드가 실행안되는 이유?

 { } 를 ( ) 로 수정해야함.

const Nweet = ({ nweetObj, isOwner }) => (
    <div>
        <h4>{nweetObj.text}</h4>
        {isOwner && (
        <>
        <button>Delete Nweet</button>
        <button>Edit Nweet</button>
        </>
        )}
    </div>
);

또는

const Nweet = ({ nweetObj, isOwner }) => {

    return(
        <div>
            <h4>{nweetObj.text}</h4>
            {isOwner && (
            <>
            <button>Delete Nweet</button>
            <button>Edit Nweet</button>
            </>
            )}
        </div>
    )
};

 

 

 

reference 는 구글 클라우드 스토리지 오브젝트에 대한 참조. (=bucket)

 

 

 

**React.js는 너무 큰 Object의 경우 변화의 결정장애가 올 수 있음. 실시간 렌더링 불가.

작은 단위로 쪼개면 실시간 렌더링ok

 

 

deploy는 강의 참고할 것. firebase의

Authentication - sign-in method 

에서 도메인 ex) jungly5935.github.io 를 추가해야함