본문 바로가기
개발 일지/TIL

[ 스파르타 / TIL ] 내일배움캠프 #46

by CODESIGN 2023. 1. 2.

오늘 한 것


  • 알고리즘 문제 풀기
  • SaveDuck uid 에러 해결
  • React Native firebase 연결해보기

 

오늘의 배움


AsyncStorage


Async Storage를 이용해서 새로고침해도 모든 상태가 유지되도록 해주었다.

https://react-native-async-storage.github.io/async-storage/docs/install/

 

async로 정의된 함수 안에서만 사용이 가능하다.

 

npm install @react-native-async-storage/async-storage

 

import를 해준다.

 

import AsyncStorage from '@react-native-async-storage/async-storage';

 

 

uid 에러


아래의 코드에서 처럼 로그인 후 import useAuth를 해서 currentUser에서 uid가 같을 경우 유저가 쓴 목록을 가져오려고 했다. 

 

import { useAuth } from '../../firebase.js';

const currentUser = useAuth();

const shoppingListUnchecked = () => {
    const q = query(collection(db, dateToString), where('userId', '==', currentUser.uid));

    getDocs(q).then((querySnapshop) => { ... }
    
    ...
}

 

하지만  where 문만 쓰면 uid가 없다는 에러가 났다. 

 

해결


처음 페이지가 로드 될때는 currentUser가 undefined였다가 시간이 조금 지난 뒤에 currentUser에 user가 설정이 되었다. 그래서 where 문을 쓰면 비교한 currentUser가 undefined여서 uid가 없어 애러가 났던 것이다.

 

아래와 같이 useEffect 부분에서 currentUser이 없을 경우 return을 해줌으로서 해결되었다. 비동기 처리를 잘 활용해서 코드를 짜야겠다.

 

 useEffect(() => {
    if (!currentUser) return;
    calculateTotalPrice();
    shoppingListUnchecked();
  }, [dateToString, currentUser]);

 

 

댓글