firestore ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ๊ฐํธํ๊ฒ database๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ -> test mode ์ ํ -> cloud firestore ์์น ์ค์ (north korea)
Collection
: ํด๋์ ๊ฐ์ ์ญํ ์ ํจ
Document
: ๋ฌธ์์ ๊ฐ์ ์ญํ ์ ํจ
์๋ก์ด collection๊ณผ document๋ค์ ์ถ๊ฐํ ์ ์๋ค.
(์ฌ์ดํธ์์ ์ง์ ์ถ๊ฐํ ์๋ ์๊ณ , ์ฝ๋๋ก ์๋์ผ๋ก ์ถ๊ฐ ํ ์๋ ์์)
CRUD๋ ๋๋ถ๋ถ์ ์ปดํจํฐ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ธ Create(์์ฑ), Read(์ฝ๊ธฐ), Update(๊ฐฑ์ ), Delete(์ญ์ )๋ฅผ ๋ฌถ์ด์ ์ผ์ปซ๋ ๋ง์ด๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ถ์ด์ผ ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฆฌํค๋ ์ฉ์ด๋ก์๋ ์ฌ์ฉ๋๋ค.
https://livedata.tistory.com/3
addDoc
, collection
์ด์ฉfbase.js
import { getFirestore } from "firebase/firestore";
export const dbService = getFirestore();
Home.js
import { dbService } from "fbase";
import { addDoc, collection } from "firebase/firestore";
const [tweet, setTweet] = useState("");
const onSubmit = async (event) => {
event.preventDefault();
try {
const docRef = await addDoc(collection(dbService, "tweets"), {
tweet,
createdAt: Date.now(),
});
} catch (error) {
console.log("Error adding document", error);
}
};
getDocs
, query
์ด์ฉimport { addDoc, collection, getDocs, query } from "firebase/firestore";
const [tweets, setTweets] = useState([]);
const getTweets = async () => {
const q = query(collection(dbService, "tweets"));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
const tweetObj = {
...doc.data(),
id: doc.id,
};
setTweets((prev) => [tweetObj, ...prev]);
});
};
useEffect(() => {
getTweets();
}, []);
return(
<div>
{tweets.map((tweet) => (
<h4 key={tweet.id}>{tweet.tweet}</h4>
))}
</div>
)
์ฐธ๊ณ ) ์ ๋ ฅ๊ฐ์ด ์ฌ๋ฌ๋ฒ ์ ์ฅ๋๋ ๊ฒฝ์ฐ
ํด๊ฒฐ์ฑ : index.js์์ strictmode ์ง์ฐ๊ธฐ
์ฌ๋ฌ๋ฒ ์ ์ฅ๋๋ ์ด์ : strict mode์์๋ side effect๋ฅผ ์ค์ด๊ธฐ ์ํด ์ผ๋ถ๋ฌ ๋ ๋ฒ์ฉ ์คํ์ํจ๋ค. production ํ๊ฒฝ์์๋ ๋ฌด์๋๋ค.
onSnapshot : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณํ๋ฅผ ์ค์๊ฐ์ผ๋ก ์๋ ค์ค
์๋ก๊ณ ์นจ์ ํด์ผ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋๋๋ฐ, ์๋ก๊ณ ์นจ์ ํ์ง ์๊ณ ๋ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉํจ.
(๋ชจ๋ ์์๊ฐ ์ค์๊ฐ์ผ ํ์๋ ์๋ค.)
const onSubmit = (event) => {
event.preventDefault();
updateDoc(TweetTextRef, {
text: newTweet,
});
setEditing(false); // editng ๋ชจ๋ ํ์ด์ฃผ๊ธฐ
};
const TweetTextRef = doc(dbService, "tweets", `${tweetObj.id}`);
deleteDoc(TweetTextRef);