TIL_220604_리액트 돔, 파이어베이스 버전 차이

설탕유령·2022년 6월 5일
0

새롭게 리액트 프로젝트 공부를 시작하면서 이미 작성된 프로젝트를 가져와 실행을 시켜보고 있다.
그러던 도중 생기는 문제점이, 예전 프로젝트를 최신 버전 라이브러리에서 동작시키려 하니 문법 오류가 발생했다.

[react-router-dom]
v5에서 v6로 변경되면서 주로 문제가 된게 Switch 구문이었다
<Switch><Routes>로 변경되었고,
정확한 위치를 지정하는 exact 구문이 사라졌다.
또한 component 속성이 element로 변경 되었다.
이전에는 단순히 지정할 텍스트만 입력이 된거 같은데,
현재는 <텍스트> 형태로 지정을 해야한다.

다음으로는 useHistory -> useNavigate로 변경이 되었다.
크게 바뀐건 아니지만, 처음 배우는거다 보니 오류가 발생하면 잘 따라가지를 못하고 있다.

[firebase]
파이어베이스는 8에서 9로 변경되면서 다양한 점이 바뀐것 같다.
시작에 config 부분에서도 가져오는 패키지 자체가 달라졌다

// Version 8
import firebase from "firebase/app";
import "firebase/firestore";

const firebaseConfig = {
    // ...
};

firebase.initializeApp(firebaseConfig);

const db = firebase.firestore();


// Version 9
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

const firebaseConfig = {
    // ...
};

const app = initializeApp(firebaseConfig);

const db = getFirestore(app);

또한 데이터 CRUD 관련 구문이 바뀌었다.

// version 8
db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});

// version 9
import { collection, getDocs } from "firebase/firestore";

const querySnapshot = await getDocs(collection(db, "users"));
querySnapshot.forEach((doc) => {
  console.log(`${doc.id} => ${doc.data()}`);
});

이상한 점은 버전9 에서 forEach를 바로 사용했지만 내가 적용 할때는 .then을 통해 한번 펼쳐주고 사용을 했어야했다.
await 때문인지는 모르겠지만 좀더 파보면 알게 될 것 같다.

profile
달콤살벌

0개의 댓글