๐Ÿคฎ ์ฝ”๋”ฉ์ดˆ์งœ ์ฝ”์นญ ํ”„๋กœ์ ํŠธ - (3) ์Šคํ…Œ์ดํŠธ

Taurineยท2022๋…„ 2์›” 1์ผ
post-thumbnail

๋“ค์–ด๊ฐ€๊ธฐ

์ˆ˜์—…๋ชฉํ‘œ

  • state ํ™œ์šฉํ•ด์„œ ๋ชจ๋‹ฌ ๋„๊ณ -์ผœ๊ธฐ
  • props ํ™œ์šฉํ•ด์„œ ๊ฐ€๋ผ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

๋ฐœ์ „ํ•œ ๊ฒƒ

  • ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ๊ฐ€๋ณ๊ฒŒ ์—ฐ์†ํ•ด์„œ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋„๋ก, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํก์ˆ˜๋  ์ˆ˜ ์žˆ๊ฒŒ
  • ๊ต์•ˆ์€ ๋กœ์ง ์™„์„ฑ๋˜๊ณ  ์ž‘์„ฑ ์‹œ์ž‘ํ•ด์•ผํ•จ. ๋กœ์ง์ด ํ”๋“ค๋ฆฌ๋ฉด ๊ต์•ˆ ์ž‘์„ฑ ๋‡Œ ํ„ฐ์ ธ๋ฒ„๋ ค
  • ์•Œ๋ ค์ค„๊ฒƒ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ž๋ฃŒ ๋ณด๋‹ˆ๊นŒ ํ™•์‹คํžˆ ๋” ๋งŽ์€๊ฒŒ ๋ณด์ด๊ณ  ํก์ˆ˜๋„ ์‰ฝ๋‹ค.



state

์ด๊ฒŒ ๋ญ๋ƒ

  • ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ
  • ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •
    • import : ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐœ๋ฐœ๋„๊ตฌ ๊ฐ€์ ธ์˜ค๊ธฐ
    • function : ๊ฐœ๋ฐœ๋„๊ตฌ ํ™œ์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ
      • state : ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ
      • render : ๋ฐ์ดํ„ฐ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ
    • export : ๋‹ค๋ฅธ๋ฐ์„œ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ •์˜ํ•˜๊ธฐ

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ = ๋ฐ์ดํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ •๋ฆฌํ•ด๋‘ฌ์•ผ, ์™์™ ๊บผ๋‚ด์“ธ ์ˆ˜ ์žˆ์Œ.

    • ๋ฐ์ดํ„ฐ ์ •๋ฆฌํ•˜๊ณ  ๊บผ๋‚ด๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์žˆ์Œ.
  • ๋ชจ๋‹ฌ์„ ์ผœ๊ณ -๋„๊ธฐ ์œ„ํ•œ state๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž

    • app.js
      => import React, { useState } from "react";
      => const [isOpen, setIsOpen] = useState(false);
  • true, false ๋ฐ”๊ฟ”์„œ ๋ชจ๋‹ฌ์„ ์ผœ๊ณ  ๊บผ๋ณด์ž!


๋ฐ”๊ฟ”์ฃผ๊ธฐ

  • render์•ˆ์—์„œ ํ•จ๋ถ€๋กœ state ๋ฐ”๊พธ๋ฉด ์•ˆ๋จ

  • ์™œ? state ๋ฐ”๋€” ๋•Œ ๋งˆ๋‹ค render ํ•จ์ˆ˜ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ

  • state ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋ฆฌ์•กํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋„๋ก ์•ž์„œ ์ •์˜ํ•œ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์•ผํ•จ.

  • ๋ชจ๋‹ฌ์— ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋‹ฌ์ด ๊บผ์ง€๊ณ , ํ™”๋ฉด์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋‹ฌ์ด ์ผœ์ง€๊ฒŒ ํ•ด๋ณด์ž.

    • app.js
      => ๋ชจ๋‹ฌ์ผœ๊ธฐ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ (๋ชจ๋‹ฌ๋ฐ–์—)
      <button onClick={() => setIsOpen(true)}>๋ชจ๋‹ฌ์ผœ๊ธฐ</button>
      => ๋ชจ๋‹ฌ๋„๊ธฐ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ (๋ชจ๋‹ฌ์•ˆ์—)
      <button onClick={() => setIsOpen(false)}>๋ชจ๋‹ฌ๋„๊ธฐ</button>
  • ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ๋ชจ๋‹ฌ์„ ์ผœ๊ณ  ๊บผ๋ณด์ž!




props

์ด๊ฒŒ ๋ญ๋ƒ?

  • ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์š”๋Ÿฐ ๋А๋‚Œ

์จ๋ณด์ž

  • ์ž„์‹œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด์ž
  • ์ž…๋ ฅ์ฐฝ์— ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ํ™”๋ฉด์— ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜์–ด ํ™˜์˜๋ฐ›๋„๋ก!
    • app.js
      => state const [nickname, setNickname] = useState("");
      => input <input onChange={(e) => setNickname(e.target.value)} value={nickname} ></input>
      => props <Route path="/profile" element={<PageProfile nickname={nickname} />} />
    • profile.js



๋‚˜๊ฐ€๊ธฐ

  • ๊ฒฝํ—˜ ์—†์ด ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„๊นŒ?
  • ๊ฐœ๋…์ด๋ž€๊ฒƒ์€ ๋น„์Šทํ•œ ๊ฒฝํ—˜์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ท€๋‚ฉ์ ์œผ๋กœ ๋„์ถœ๋˜๋Š” ๊ฒƒ์ธ๋ฐ,
  • ๊ทธ๊ฒƒ์„ ํ•œ๋ฒˆ๋„ ๊ฒฝํ—˜ํ•œ์  ์—†๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ดํ•ด์‹œํ‚ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ• ๊นŒ?
  • ์‚ฌ๊ณผ๋ฅผ ๋ณธ์ ๋„ ์—†๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์‚ฌ๊ณผ๋ฅผ ์ดํ•ด์‹œํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด..
  • ๊ทธ๊ฒƒ์˜ ๋ง›, ๋น›๊น”, ์ด‰๊ฐ, ํ–ฅ.. ๊ทธ๋ฆฌ๊ณ  ํ•œ์ž… ๋ฒ ์–ด๋ฌผ๋•Œ์˜ ์•„์‚ญ๊ฑฐ๋ฆฌ๋Š” ์†Œ๋ฆฌ๋ฅผ ์ดํ•ด์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ ??
  • ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.. ์ดํ•ด์‹œํ‚ค๊ธฐ ๋ณด๋‹ค ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•ด์•ผํ•œ๋‹ค.
  • ๋ง๋กœ ์„ค๋ช…ํ•˜๊ธฐ ๋ณด๋‹ค, ์–ด๋–ค ์ƒํ™ฉ์— ํ•„์š”ํ•œ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์จ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•ด์•ผํ•œ๋‹ค.
  • ๋ง์€ ์ค„์ด๊ณ , ๊ฒฝํ—˜์€ ๋Š˜๋ฆฌ์ž. ๊ทธ๊ฒŒ ๋‹ต์ธ ๋“ฏ ํ•˜๋‹ค.

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