[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] state-props ๊ณผ์ œ

JiEunยท2023๋…„ 3์›” 27์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์ด์ „ ํ•™์Šต์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ state, props, event๋ฅผ ํ™œ์šฉํ•ด ํ‘ธ๋Š” ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.


๐Ÿ“ Tweets-state-props

๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์ƒ๊ฐ ๋ณด๋‹ค ์‰ฌ์›Œ์„œ ๊ธˆ๋ฐฉ ์ง„ํ–‰ ๋˜์—ˆ๋Š”๋ฐ
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๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const[state ์ €์žฅ ๋ณ€์ˆ˜, state ๊ฐฑ์‹  ํ•จ์ˆ˜] useState(์ดˆ๊ธฐ ๊ฐ’)

  • useState ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด state๋ฅผ ์„ ์–ธํ•  ๋•Œ๋Š” [ , ]์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•œ๋‹ค. (๋ฐฐ์—ด ํ˜•์‹)
  • useState์— ๋ฐฐ์—ด, ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋• ๊นŠ์€ ๋ณต์‚ฌ(spread syntax ๋“ฑ) ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • useState๋Š” string, number, array, object ๋“ฑ ์ „๋ถ€ ์ €์žฅ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ณ€์ˆ˜ ๋Œ€์‹  ์“ฐ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์ด๋‹ค.
  • ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๊ณ  ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜ ๋Œ€์‹  state๋กœ ์ €์žฅํ•œ๋‹ค.

onChange

  • input, textarea ๋“ฑ์˜ ์ž…๋ ฅ ํผ์—๋Š” onChange ์†์„ฑ์„ ๋„ฃ์–ด์ค˜์•ผ ์ž‘์„ฑ ๋‚ด์šฉ์ด ๋ณด์ธ๋‹ค.

map()

  • map()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ key={}์†์„ฑ์„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ ๊ณผ์ œ๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์ด๋ฏธ ๋ฐฐ์› ๋˜ ์˜์—ญ์œผ๋กœ ๋ณต์Šตํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์‹ ๊ทœ ๊ธ€์„ ์ƒ๋‹จ์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์ƒ๊ฐ ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

์•Œ๊ณ  ๋ณด๋‹ˆ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ์ค‘๋ณต ์„ ์–ธ๋œ ๋ฌธ์ œ๋กœ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋˜ ํŽ˜์–ด๋ถ„ ๊ป˜์„œ ์ฐพ์•„ ์ฃผ์…จ๋‹ค.

์—๋Ÿฌ๊ฐ€ ๋‚˜๊ณ  ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ๋ฌธ์ œ์ ์ด ์—†์„ ๊ฒฝ์šฐ
๋‹ค๋ฅธ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ์œ ์‹ฌํžˆ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€