: 로그인 성공 시 Home.js로 라우팅
: state - isLoggedIn → isLoggedIn ? <Home /> : <Auth />
성공시 Home
: firebase의 firestore기능을 사용하기 위한 파일
: dbService = firebase.firestore();
→ dbService로 다른 파일에서 firebase의 firestore기능 호출 가능
: dbService.collection("noweets").onSnapshot((snapshot) => {...})
→ firestore의 collection의 "noweets"라는 저장소에서 글 불러오기 (Read)
: 내 포스팅 : CRUD(1) : Create/Read/Update/Delete CREATE ! 에서 작성한 noweet을 담고있는 컴포넌트
: 읽기(Read)/수정(Update)/삭제(Delete)를 용이하게 하기 위해 컴포넌트 파일 분리했음
: 로그인 성공 시 글 열람(Read)을 할 수 있는 페이지
: state - noweets(noweet을 Array로 관리)
(.map
을 이용해 출력할 것이기 때문)
: function
useEffect(로그인 후 작성된 글을 바로 불러와야 하니까 useEffect()훅 사용)
onSnapshot(firebase에 저장되어있는 데이터를 가져옴)
(firease 내장함수)
.map (snapshot으로 데이터 가져올 때, noweets를 출력할 때 사용)
map 사용법 참고 👉🏻 내 포스팅 : [React] Map(data,i)
❓ 동작원리 ❓
1.useEffect()
를 이용하여 로그인 후 페이지가 mount 될 때마다,
2. firebase의 "noweets"라는 저장소에 저장된 자료를onSnapshot()
을 이용하여
3.noweetArray
를 선언해, 자료의 id값과 data를 저장 후
4.setNoweets(noweetArray)
를 이용해 저장된 값 noweets에 저장
→ 이제 firebase의 데이터를 코드 상으로 보여줄 수 있게 됨
5.return()
에서noweets.map(...)
을 이용하여 Array에 저장된 값 전체 출력할껀데
6.<Noweet />
컴포넌트에 전달하여 출력하자
※noweet
를noweetObj
이라는 변수로 전달했음을 유의
return값에 Home에서 전달받은noweetObj.text
를 출력 !
사실 Read 기능만 생각하면 따로 분리할 필요가 없음
그러나 수정(Update)과 삭제(Delete) 기능도 추가할껀데,
수정과 삭제는 해당 글을 작성한 유저만이 권한을 얻을 수 있어야 하기때문에
해당 유저인지 확인하는 기능, [수정]을 클릭했을 때 글 수정을 위한 UI 구현 등을 생각해봤을때
컴포넌트를 다른 파일로 분리하는 것이 편리할 것이다.
앞으로 다룰 수정(Update)과 삭제(Delete) 기능은 <Noweet />
컴포넌트에서 구현될 예정이다.
onSnapshot()
을 이용하여 가져오면 편함.map()
으로 가져와야 함 ❗