์ด์ ํ์ต์๊ฐ์ ๋ฐฐ์ ๋ state, props, event๋ฅผ ํ์ฉํด ํธ๋ ๊ณผ์ ๋ฅผ ์งํํ๋ค.
๋ค๋ฅธ ๋ถ๋ถ์ ์๊ฐ ๋ณด๋ค ์ฌ์์ ๊ธ๋ฐฉ ์งํ ๋์๋๋ฐ
Tweets.js์์ ์๋ก์ด ํธ์ ์
๋ ฅ ํ ๋ฒํผ ํด๋ฆญ์ ์ต์๋จ์ผ๋ก ์
๋ก๋ ํ๋ ์์ญ์ด ์ด๋ ค์ ๋ค.
useState๋ถ๋ถ ์ดํด๊ฐ ์ ๋์ง ์์ ์ ํ๋ธ ์์์ ๋ง์ด ๋ดค๋ ๊ฑฐ ๊ฐ๋ค.
const [ํ์ฌ useState์ ๋ค์ด๊ฐ state ๋ณ์, ํ์ฌ state๋ฅผ ๊ฐฑ์ ํด ์ฃผ๋ ํจ์] = useState(useState ์ด๊ธฐ ๊ฐ);
const [tweets, setTweets] = useState(dummyTweets);
tweets
์๋ dummyTweets
๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ค.const handleButtonClick = (event) => {
// tweet์ ์ ๊ท ๊ฐ์ฒด ์์ฑํ๊ธฐ username, content์ username, msg ์ถ๊ฐํ๊ธฐ
const tweet = {
id: tweets.length + 1,
username: username,
picture: `https://randomuser.me/api/portraits/women/${getRandomNumber(
1,
98
)}.jpg`,
content: msg,
createdAt: new Date(),
updatedAt: new Date(),
}
// TODO : Tweet button ์๋ฆฌ๋จผํธ ํด๋ฆญ์ ์๋ํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
// ํธ์ ์ ์ก์ด ๊ฐ๋ฅํ๊ฒ ์์ฑํด์ผ ํฉ๋๋ค.
// setTweets ํจ์์ ์์ฑํ tweet ์๋จ์ ๋ฐฐ์นํ๊ธฐ
// dummyTweets๊ฐ์ด ๋ด๊ฒจ์๋ tweets ๋ค์ spread syntax๋ก ์ถ๊ฐํด ์ฃผ๊ธฐ
// (๋ฐฐ์ด, ๊ฐ์ฒด๋ ๊น์ ๋ณต์ฌ๋ฅผ ํด์ ๊ฐ์ ธ์์ผํ๋ค. (push, unshift))
return setTweets([tweet, ...tweets]);
};
setTweets
ํจ์๋ฅผ ์ด์ฉํด tweet
๋ฅผ ์์ ํ ์ ์๋ค.[ , ]
์ผ๋ก ๊ฐ์ธ์ค์ผํ๋ค. (๋ฐฐ์ด ํ์)input
, textarea
๋ฑ์ ์
๋ ฅ ํผ์๋ onChange ์์ฑ์ ๋ฃ์ด์ค์ผ ์์ฑ ๋ด์ฉ์ด ๋ณด์ธ๋ค.map()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ key={}
์์ฑ์ ๋ฃ์ด์ค์ผํ๋ค.์ด๋ฒ ๊ณผ์ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ด๋ฏธ ๋ฐฐ์ ๋ ์์ญ์ผ๋ก ๋ณต์ตํ๋ ๊ฐ๋ ์ผ๋ก ๊ฐ๋ณ๊ฒ ํ ์ ์์์ง๋ง ์ ๊ท ๊ธ์ ์๋จ์ ๋ฐฐ์นํ๋ ๋ฌธ์ ์์ ์๊ฐ ๋ณด๋ค ์ค๋ ๊ฑธ๋ ธ๋ค.
์๊ณ ๋ณด๋ ๋ค๋ฅธ ํ์ด์ง์์ ์ค๋ณต ์ ์ธ๋ ๋ฌธ์ ๋ก ๊ฐ์ด ์งํํ๋ ํ์ด๋ถ ๊ป์ ์ฐพ์ ์ฃผ์ จ๋ค.
์๋ฌ๊ฐ ๋๊ณ ๋ด๊ฐ ์์ฑํ ์ฝ๋์ ๋ฌธ์ ์ ์ด ์์ ๊ฒฝ์ฐ
๋ค๋ฅธ ์ฐ๊ฒฐ๋์ด ์๋ ํ์ด์ง๋ฅผ ์ ์ฌํ ์ดํด๋ณผ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.