Firebase가 지원하는 데이터베이스 종류
.env.local
파일 생성 후(최상단 폴더에 생성), 개인 key 저장.gitignore
에 추가되어 깃헙에 업로드할때 알아서 걸러준다!process.env.
로 .env.local에 저장한 개인 key 불러옴// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID,
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
// Firebase 객체 저장
export const db = getFirestore(app);
import { useEffect } from "react";
import "./App.css";
import { db } from "./Firebase";
function App() {
useEffect(() => {
console.log(db);
});
return <></>;
}
export default App;
👉 개인 projectId 확인
import { async } from "@firebase/util";
import { collection, getDocs } from "firebase/firestore";
import { useEffect } from "react";
import "./App.css";
import { db } from "./firebase";
function App() {
const fruitCollection = collection(db, "fruits");
useEffect(() => {
async function getFruits() {
const data = await getDocs(fruitCollection);
console.log(data);
}
getFruits();
}, []);
return <></>;
}
export default App;
👉 docs:Array() 클릭
👉 Fields 확인
import { async } from "@firebase/util";
import { collection, getDocs, getDoc, doc } from "firebase/firestore";
import { useEffect } from "react";
import "./App.css";
import { db } from "./firebase";
function App() {
const fruitCollection = collection(db, "fruits");
useEffect(() => {
async function getFruits() {
const docRef = doc(fruitCollection, "딸기");
const data = await getDoc(docRef);
if (data.exists()) {
console.log("결과 : ", data.data());
} else {
console.log("결과 없음");
}
};
getFruits();
}, []);
return <></>;
}
export default App;
👉 document가 “딸기”인 경우만 검색
import { async } from "@firebase/util";
import {
collection,
getDocs,
getDoc,
doc,
query,
where,
} from "firebase/firestore";
import { useEffect } from "react";
import "./App.css";
import { db } from "./firebase";
function App() {
const fruitCollection = collection(db, "fruits");
useEffect(() => {
async function getFruits() {
// where 함수 => 검색
const data = query(fruitCollection, where("season", "==", "가을"));
const querySnapshot = await getDocs(data);
querySnapshot.forEach((doc) => {
console.log(doc.id, " : ", doc.data());
});
}
getFruits();
}, []);
return <></>;
}
export default App;
👉 season이 “가을”에 해당하는 과일만 검색
조건 검색하기(
import { async } from "@firebase/util";
import {
collection,
getDocs,
getDoc,
doc,
query,
where,
} from "firebase/firestore";
import { useEffect } from "react";
import "./App.css";
import { db } from "./firebase";
function App() {
const fruitCollection = collection(db, "fruits");
useEffect(() => {
async function getFruits() {
// where 함수 => 검색
const data = query(fruitCollection, where("price", ">", 5000));
const querySnapshot = await getDocs(data);
querySnapshot.forEach((doc) => {
console.log(doc.id, " : ", doc.data());
});
}
getFruits();
}, []);
return <></>;
}
export default App;
👉 price가 5000이상인 과일만 검색
import { async } from "@firebase/util";
import {
collection,
getDocs,
getDoc,
doc,
query,
where,
setDoc
} from "firebase/firestore";
import { useEffect } from "react";
import "./App.css";
import { db } from "./firebase";
function App() {
const fruitCollection = collection(db, "fruits");
async function setFruit() {
await setDoc(doc(fruitCollection, "바나나"), {
season: "봄",
color: "노랑",
taste: "달콤",
price: 3000,
});
}
return <><button onClick={setFruit}>과일 추가</button></>;
}
export default App;
👉 바나나 추가 완료
import { db } from "./firebase";
import { 생략, setDoc } from "firebase/firestore";
const App = () => {
const fruitCollection= collection(db, "fruits");
async function **updateFruit**() {
await **updateDoc**(doc(fruitCollection, "바나나"), {
season: "봄",
color: "노랑",
taste: "달콤",
price: 5000,
});
}
return <div><button onClick={**updateFruit**}>과일수정</button></div>;
};
export default App;
👉 바나나 price 수정 완료
import { db } from "./firebase";
import { 생략, setDoc } from "firebase/firestore";
const App = () => {
const fruitCollection= collection(db, "fruits");
async function **updateFruit**() {
await **updateDoc**(doc(fruitCollection, "바나나"), {
season: "봄",
color: "노랑",
taste: "달콤",
price: 5000,
count: 10,
});
}
return <div><button onClick={**updateFruit**}>과일수정</button></div>;
};
export default App;
👉 바나나에 새로운 field “count : 10” 추가 완료
import { db } from "./firebase";
import { 생략, deleteDoc } from "firebase/firestore";
const App = () => {
const fruitCollection= collection(db, "fruits");
async function **deleteFruit**() {
await **deleteDoc**(doc(fruitCollection, "메론"));
}
return <div><button onClick={**deleteFruit**}>과일삭제</button></div>;
};
export default App;
👉 메론 삭제 완료
import { db } from "./firebase";
import { 생략, deleteField } from "firebase/firestore";
const App = () => {
const fruitCollection= collection(db, "fruits");
async function **deleteFieldFruit**() {
await **updateDoc**(doc(fruitCollection, "바나나"), {
**count**: **deleteField()**,
});
}
return
<div>
<button onClick={**deleteFieldFruit**}>특정필드삭제</button>
</div>;
};
export default App;
👉 바나나의 “count” field 삭제 완료
💡 input 태그의 value 속성 → 리액트에서는 value의 값 수정이 불가능하다새싹DT 기업연계형 프론트엔드 실무 프로젝트 과정 9주차 블로그 포스팅