import { initializeApp } from "firebase/app";
const firebaseConfig = {
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
};
const app = initializeApp(firebaseConfig);
export default app;
import firebase from "firebase/compat/app";
// .env
REACT_APP_API_KEY = ...
// src/firebase.js
apiKey: process.env.REACT_APP_API_KEY,
// fbase.js
import { getAuth } from "firebase/auth";
...
export const authService = getAuth();
// doc 생성
const onSubmit = async (event) => {
event.preventDefault();
await addDoc(collection(dbService, "tweets"), {
tweet,
createAt: Date.now(),
});
setTweet("");
};
// doc 가져오기
const getTweets = async () => {
const dbTweets = await getDocs(collection(dbService, "tweets"));
dbTweets.forEach((document) => {
const tweetObj = {
...document.data(),
id: document.id,
};
setTweets((prev) => [tweetObj, ...prev]);
});
};
or
// onSnapshot을 이용하면 db에 변동사항이 생길때마다 갱신(listener)
useEffect(() => {
onSnapshot(collection(dbService, "tweets"), (snapshot) => {
const tweetArray = snapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
setTweets(tweetArray);
});
}, []);
// doc 삭제
await deleteDoc(doc(dbService, "tweets", `${tweetObj.id}`));
// doc 업데이트
await updateDoc(doc(dbService, "tweets", `${tweetObj.id}`), {
text: newTweet,
});