์ข ํฉ ํด์ฆ์์ ๋ฌด๋ ค 4๊ฐ๋ ํ๋ ค์ ๋ฐ๋ง๋ถ์ธ๋ฐ์ ์ ์ ๋์๋ค...ใ
์ด์ฌํ ํ์๋ค ์๊ฐํ๋๋ฐ ์ญ์๋ ๋ค์ค ๋ฌธ์ ๋ ์์ ํ ๋ฌธ์ ๋ฅผ ํ๋ ธ๋ค.
// TODO : ์๋ก ํธ์์ ์์ฑํ๊ณ ์ ์กํ ์ ์๊ฒ useState๋ฅผ ์ ์ ํ ํ์ฉํ์ธ์.
// useState์ dummyTweets์ผ๋ก ์ด๊ธฐ ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
const [username, setUserName] = useState('');
const [msg, setMsg] = useState('');
const [tweets, setTweets] = useState(dummyTweets);
// picture ์ถ๋ ฅ์ด ์๋๋ ๋ฌธ์ ๋ก ์ด์ ํ์ผ์์ ๊ฐ์ ธ์ค๊ธฐ
const getRandomNumber = (min, max) => {
return parseInt(Math.random() * (Number(max) - Number(min) + 2));
};
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]);
};
.
.
.
// button ํ๊ทธ onClick={ํด๋น ํจ์} ํจ์ ์ถ๊ฐํด ์ฃผ๊ธฐ
// ํด๋ฆญ ์ ์์ฑ ๋๋๋ก ์์
<button className='tweetForm__submitButton' onClick={handleButtonClick}>์ ์ก</button>
{}
์ค๊ดํธ์ ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ ์ด๋ป๊ฒ ์์ฑํด์ผํ๋์ง ํท๊ฐ๋ ธ๋ค.setTweets([tweet, ...tweets]);
์ด๋ถ๋ถ๋ ์ ์ด๋ ๊ฒ ์์ฑํด์ผํ๋์ง๋ ์๊ฒ ๋์๋ค.์ด๋ฐ์ unshift ์ฌ์ฉํด์ ์ด๊ฒ ์ ์ ๋๋์ง ์๋ฌธ์ ๊ฐ์ก๋ ๊ฑฐ ๊ฐ๋ค.
์ด๋ฒ ๋ฐ๋ง๋ถ์ด ๊ณผ์ ๋ธ๋ก๊น
ํ๋ฉด์ ๋ด๊ฐ ๋์ณค๋ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ๊ธฐ๋ ํ๊ณ
๋๋์๋ณด๋ ์๊ฐ์ด ๋์๋ ๊ฒ ๊ฐ๋ค.