: 로그인한 사람의 아이디와 트윗 작성자 아이디가 같은 트윗만 화면에 출력 (프로필 페이지로 이동 시(렌더링 시), 내가 쓴 트윗만 보여주도록하는 함수 실행-useEffect의 첫 번째 인자에 실행 함수 전달!!!)
-> 파이어스토어에 쿼리문 보내기 (쿼리를 위한 라이브러리도 준비되어있음)
: 프로필에 사용자정보 보여주기 위해, 라우터에서 userObj 정보 받아와야 함(프롭스로)
-> 라우터에서 userObj를 Profile 컴포넌트로 넘겨주자
-> Profile 컴포넌트에 userObj 프롭스 전달
-> Profile 컴포넌트가 userObj 프롭스로 받음
: 로그인한 사용자의 트윗만 가지고 오는 함수 생성
-> Profile 컴포넌트가 렌더링될 때, 작업들이 진행되어야 함 (useEffect의 두번째 인자에 빈 배열[] 전달)
: 트윗 목록을 오름차순, 내림차순으로 정리
: 쿼리문 실행하려면 get 함수 필요
-> 쿼리 문을 통해 얻은 결과물 가져오는 함수
-> 렌더링 하자마자, 내 트윗만 보여주기 위해 useEffect의 첫번째 인자로 getMyweets 함수 호출
-> get 결과물에서 사용할 수 있는 데이터만 배열로 추출하기 위해 map함수 사용
-> 내 트윗 내용의 data들이 뜰 줄 알았는데 오류 발생
-> orderBy 함수는 파이어스토어에서 indexing 작업이 되어있는 상태가 아니라면 사용할 수 없음 (파이어베이스에서 제공하는 데이터베이스 관련 함수 중에는 파이어베이스가 받아들일 준비가 되어 있지 않으면 사용할 수 없는 것들이 있음!!)
-> 임의로 creatorId를 하나 바꿔줌. 그 트윗은 프로필 페이지에서 안떠야 함
-> 그 값을 제외하고 프로필페이지에 뜨고 있음을 알 수 있다.
⭕ 정리:
여기까지는 내가 쓴 트윗만 내 프로필 페이지에서 오름차순으로 뜨게하는 것이다. Profile 페이지를 첫 렌더링 했을 때, 바로 내가 쓴 트윗만 뜨게할 것이므로, useEffect 함수를 사용한다.
그 함수에서는 collection을 통해 컬렉션 가져오고(트윗들 모두) 그 중에서 where 쿼리문을 통해, 사용자 정보와 일치하는 경우에만 가져와서, 오름차순으로 정렬해서 get()함수를 이용해서 받아왔다. 거기서 우리가 필요한 data만 추출하기 위해서 map함수를 이용해 필요한 데이터만 얻었다.
-> 즉 쿼리문을 이용해, 사용자 아이디와 트윗 작성자 아이디가 일치하는 경우에만 오름차순으로 프로필 페이지에 보여주고자 코딩함. 아직은 브라우저에는 안 나타나고, 콘솔에 나타남)
: 로그인한 사용자의 이름을 표시하고 프로필 업데이트하도록 프로필 페이지에 기능 추가
-> 필터링 관련 내용은 삭제할 것임
-> getMyNweets, useEffect 부분 모두 삭제해주기
-> 이 화면을 보여주는 것은 내비게이션 컴포넌트임
-> 여기서 my profile 대신에 로그인한 사용자의 이름을 출력하려면
-> userObj props를 내비게이션 컴포넌트로 보내서 이름 출력에 사용
: 소셜로그인이 제공하는 displayName 항목을 쓰고 싶지 않은 사람들을 위해 만든 기능
-> 비동기 작업이므로(async-await)
-> 조건을 걸어주어, 기존의 displayName과 새로 입력한 newDisplayName이 다른 경우에만 프로필을 업데이트하도록 했다.
-> 이렇게 잘 업데이트된 것을 알 수 있다. 하지만, 새로고침을 해야만 변경이 반영된다.
--> 실시간으로 프로필 바꾸는 것을 실시해보자.
: 컴포넌트 리렌더링을 통해서
: 리렌더링해야하는 컴포넌트는 Navigation
-> 관리중인 상태가 없고, 받은 props도 userObj 뿐
-> 리렌더링을 위해 userObj 업데이트
-> userObj는 스스로 업데이트된 프로필 반영하지 못함
-> 새 프로필을 파이어베이스에서 받아온 다음 userObj에 반영해야 함
-> userObj를 새로고침하기 위해,
-> userObj를 관리하는 app.js에서 작업
-> 함수가 실행되면, 새 user를 userObj에 업데이트 해줌
: 실제 프로필을 업데이트하는 Profile 컴포넌트에서 실행 (AppRouter, Profile 컴포넌트 순서로 프롭스를 통해 내려 보내주고, Profile 컴포넌트에서 이 함수를 실행하자)
--> 즉, 여기까지는 userObj의 displayName을 바꿔주었고, 그것을 바로 반영하기 위해서는 새로운 데이터를 파이어베이스에서 받아와서 user에 업데이트 해줘야 함
: 우리에게 필요한 내용만 담은 작은 객체로
-> app.js 수정
-> userObj가 있는지 확인 하면 되므로 Boolean 함수 사용
⭕ 정리:
필터링 기능: 정렬쿼리 사용(where-> orderby)
프로필페이지 이름 변경