npm install firebase
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
// 아래 데이터는 본인의 Firebase 프로젝트 설정에서 확인할 수 있습니다.
const firebaseConfig = {
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const dbService = getFirestore(app);
import {
onSnapshot,
query,
collection,
doc,
orderBy,
addDoc,
getDoc,
getDocs,
updateDoc,
deleteDoc,
} from "firebase/firestore";
// Create
addDoc(collection(dbService, "폴더명(collection)"), 추가할객체); // collection안으로 객체( doc.data() ) 추가 이 때 doc.id는 자동으로 생성됨
// Read (단일 데이터 읽기)
const snapshot = await getDoc(doc(dbService, "폴더명(collection)", "파일명(doc.id)")); // 하나의 doc를 가져옴.
snapshot.data() // 가져온 doc의 객체 내용
snapshot.id // 가져온 doc의 id
// Read (내 Firestore collection 내에 변경이 생길 때 마다 실시간으로 읽기)
const q = query(
collection(dbService, "폴더명(todos)"),
orderBy("createdAt", "desc") // 해당 collection 내의 docs들을 createdAt 속성을 내림차순 기준으로
);
onSnapshot(q, (snapshot) => { // q (쿼리)안에 담긴 collection 내의 변화가 생길 때 마다 매번 실행됨
snapshot.docs.map((doc) => {
const newState = {
id: doc.id,
...doc.data() // doc.data() : { text, createdAt, ... }
}
});
});
// Read (query에 해당하는 모든 docs 가져오기)
const querySnapshot = await getDocs(q);
// doc.id는 DB가 자체적으로 생성하는 값으로, id도 함께 포함시키기 위해 객체 재구성
const newArr = [];
querySnapshot.forEach((doc) => {
const newObj = {
id: doc.id,
...doc.data(),
};
newArr.push(newObj);
});
// Update
updateDoc(doc(dbService, "폴더명(collection)", "파일명(doc.id)"), { text: "변경할 값" }) // doc 지정 후 변경할 속성 및 값 지정
// Delete
deleteDoc(doc(dbService, "폴더명(collection)", "파일명(doc.id)")); // 해당 doc 를 삭제
참조: firebase 공식문서
onSnapshot(q, (snapshot) => { })