๋จผ์ ํ์ด์ด์คํ ์ด์์ ์ด์ ์ ์์ฑํ ํธ์ ๋ชจ๋ ์ง์ฐ๊ณ ์์ํ์!
ํธ์์ ๋๊ฐ ํ๋์ง ์๊ธฐ ์ํด ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ฐ์์์ผ ํ๋ค.
App.js์์ ๋ชจ๋ auth๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ์.
App.js > Router.js > Home.js์ผ๋ก prop์ผ๋ก ์ ์ ์ ๋ณด๋ฅผ ๋ณด๋ด์ฃผ์. useState()๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด๋ฅผ ๋ด๋ ์ค๋ธ์ ํธ state๋ฅผ ๋ง๋ ๋ค. ๋ํดํธ ๊ฐ์ ์ผ๋จ ์๋ฌด๋ ์์ผ๋๊น null๋ก ํ๋ฉด ๋๋ค.
const [userObj, setUserObj] = useState(null);๋ชจ๋ํ์ด์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด๋ฅผ userObj์ ์ ๋ฐ์ดํธํ๋ค.
setUserObj(user);
function App() {
//์๋ต
//๐ฅ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด ๋ด์ ์ค๋ธ์ ํธ state, ๋ํดํธ ๊ฐ์ ์ผ๋จ ์๋ฌด๋ ์์ผ๋๊น null
const [userObj, setUserObj] = useState(null);
useEffect(() => {
const auth = getAuth();
//์ ์ ๋ณํ๊ฐ ์๋์ง listenํ๊ธฐ: onAuthStateChanged๊ด์ฐฐ์ ์ฌ์ฉ
//onAuthStateChanged์ ์ฝ๋ฐฑ์ด ํ์ํ๋ฐ, ์ฝ๋ฐฑ์ user์ด๋ค.
onAuthStateChanged(auth, (user) => {
//user๊ฐ ์๋ค๋ฉด ๋ก๊ทธ์ธ ์ฐธ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ์๋๋ผ๋ฉด ๋ก๊ทธ์ธ ๊ฑฐ์ง์ผ๋ก
if (user) {
setIsLoggedIn(true);
//๐ฅ๋ก๊ทธ์ธํ๋ฉด ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด userObj์ ์
๋ฐ์ดํธ
setUserObj(user);
} else {
setIsLoggedIn(false);
}
//๊ทธ๋ฌ๊ณ ๋์ ์ด๊ธฐํ ์์ผ๋ผ
setInit(true);
});
}, []);
๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด์ธ userObj๋ฅผ prop์ผ๋ก Router๋ก ๋ณด๋ธ๋ค.
{/*๋ก๊ทธ์ธํ user ์ ๋ณด AppRouter๋ก ๋ณด๋ด๊ธฐ*/}
<AppRouter isLoggedIn={isLoggedIn} userObj={userObj} />
AppRouter์์ ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด์ธ userObj๋ฅผ ๋ฐ๋๋ค.
//๐ฅ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด userObj ๋ฐ๊ธฐ
const AppRouter = ({ isLoggedIn, userObj }) => {
//...
};
//...
๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด(userObj)๋ฅผ prop์ผ๋ก Home์ปดํฌ๋ํธ์ ๋ณด๋ธ๋ค.
{/*๐ฅ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด(userObj)๋ฅผ prop์ผ๋ก Home์ปดํฌ๋ํธ์ ๋ณด๋ด๊ธฐ*/}
<Route path="/" element={<Home userObj={userObj} />}></Route>
Home์์ ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด์ธ userObj๋ฅผ ๋ฐ๋๋ค.
const Home = ({ userObj }) => {
//...
}
onSubmit ํธ๋ค๋ฌ์์ ํธ์ํ๊ธฐ ๋๋ฅด๋ฉด ์๋ก์ด document๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ ํธ์ ์์ฑ์(creatorId)์ userObj ์ค๋ธ์ ํธ์ uid๋ฅผ ๋ฃ์ด ์ฃผ๋ฉด ๋๋ค.
tweet: tweet์ด๋ ๋ถ๋ถ text: tweet์ผ๋ก key ๊ฐ์ ์์ ํด์ฃผ์.(ํธํ๋ ค๊ณ ํ๋๊ฑฐ์ ใ
ใ
!)<h4>{tweet.text}</h4> ๋ผ๊ณ ๋ฐ๊ฟ์ฃผ์.const onSubmit = async (event) => {
event.preventDefault();
//ํธ์ํ๊ธฐ ๋๋ฅด๋ฉด ์๋ก์ด document ์์ฑํ๊ธฐ
try {
const docRef = await addDoc(collection(dbService, "tweets"), {
//๐ฅํธ์ ์์ฑ์์ userObj ์ค๋ธ์ ํธ์ uid๋ฅผ ๋ฃ์ด ์ฃผ๋ฉด ๋๋ค.
creatorId: userObj.uid,
text: tweet, //tweet(value๋ก tweet state ๊ฐ)
createdAt: serverTimestamp(), //Date.now(),๋ก ํด๋ ๋์ง๋ง ์ด์ ์๋๊ฑฐ ํจ ์จ๋ณด์(ํ์์กด ๋๋ถ์3 = ์์ธ๋ก ์ค์ ๋์ด ์์)
});
console.log("Document written with ID: ", docRef.id);
} catch (error) {
console.error("Error adding document: ", error);
}
//state ๋น์์ form ๋น์ฐ๊ธฐ
setTweet("");
};