Unit6 ํšŒ๊ณ 

YEN Jยท2022๋…„ 10์›” 4์ผ
0

code states

๋ชฉ๋ก ๋ณด๊ธฐ
22/43

๐Ÿ”… Props

props๋ž€โ“
์™ธ๋ถ€, ์ฆ‰ ๋ถ€๋ชจ(์ƒ์œ„) ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’์„ ๋งํ•˜๋Š”๋ฐ ์ด๋Š” ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ(read-only) ๊ฐ์ฒด์ด๋‹ค. ๋งŒ์•ฝ props๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด props๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ props๋ฅผ ์ง์ ‘ ์ˆ˜์ • ์‹œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ๊ฐ’์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ณ  ์ด๋Š” React์˜ ๋‹จ๋ฐฉํ–ฅ, ํ•˜ํ–ฅ์‹ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์›์น™์— ์œ„๋ฐฐ๋˜๋ฏ€๋กœ ์ฝ๊ธฐ ์ „์šฉ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

props ์‚ฌ์šฉ๋ฒ•๐Ÿง

  • ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ์†์„ฑ ์ •์˜
  • props๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ •์˜๋œ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ „๋‹ฌ
    • props ์ „๋‹ฌ ๋ฐฉ๋ฒ•
      • ๋ฐฉ๋ฒ•1: ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ <tagname attribute={value} /> ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ, ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ {props.attribute} ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ๋ฐ›์Œ
      • ๋ฐฉ๋ฒ•2: ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ <opening tag>value</closing tag> ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ, {props.children} ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ๋ฐ›์Œ
  • ์ „๋‹ฌ ๋ฐ›์€ props๋ฅผ ๋ Œ๋”๋ง

๐Ÿ”… State

state๋ž€โ“
์‚ด๋ฉด์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.

Statehook, useState

  • useState ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด state๋ฅผ ๋‹ค๋ฃธ

useStatete ์‚ฌ์šฉ๋ฒ•๐Ÿฅธ

  • React๋กœ๋ถ€ํ„ฐ useState๋ฅผ ๋ถˆ๋Ÿฌ์˜ด
    • ํ˜•์‹: import { useState } from "react";
  • useState๋ฅผ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ํ˜ธ์ถœ
  • useState ํ˜ธ์ถœ ์‹œ ๋ฐฐ์—ด ๋ฐ˜ํ™˜
    • ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์š”์†Œ๋Š” ํ˜„์žฌ state ๋ณ€์ˆ˜, 1๋ฒˆ์งธ ์š”์†Œ๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
    • useState์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฐ’์€ state์˜ ์ดˆ๊ธฐ๊ฐ’
      • ์ •๋ฆฌ: const [state ์ €์žฅ ๋ณ€์ˆ˜, state ๊ฐฑ์‹  ํ•จ์ˆ˜] = useState(์ƒํƒœ ์ดˆ๊ธฐ ๊ฐ’)

state ๊ฐฑ์‹ ํ•˜๊ธฐ๐Ÿค”

  • ์˜ˆ์‹œ: checkbox
    • checkbox์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ
    • ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    • ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ state ๊ฐฑ์‹  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    • state ๊ฐฑ์‹  ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ state ์ €์žฅ ๋ณ€์ˆ˜ ๊ฐฑ์‹ 
    • React๋Š” ์ƒˆ๋กœ์šด state ์ €์žฅ ๋ณ€์ˆ˜๋ฅผ ์ปดํฌ๋„ŒํŠธ์— ๋„˜๊ฒจ ๋‹ค์‹œ ๋žœ๋”๋ง

โ—๏ธState hook ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ โ—๏ธ

React ์ปดํฌ๋„ŒํŠธ๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กญ๊ฒŒ ํ˜ธ์ถœ๋˜์–ด ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š”๋ฐ React state๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. state๋ฅผ ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝ ์‹œ๋„ํ•  ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋ง ์‹คํŒจ๋‚˜ state ๋ณ€๊ฒฝ ์‹คํŒจ๋กœ ์ด์–ด์ง„๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์ž.

๐Ÿ”… ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

React์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์ž๐Ÿ˜Ž

  • React์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ DOM๊ณผ ์œ ์‚ฌํ•˜๋‚˜ ๋ฌธ๋ฒ•์—์„œ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • React์—์„œ ์ด๋ฒคํŠธ๋Š” ์†Œ๋ฌธ์ž ๋Œ€์‹  ์นด๋ฉœ ์ผ€์ด์Šค(camelCase)๋ฅผ ์‚ฌ์šฉ
    • JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ

1๏ธโƒฃ onChange

  • ํผ(Form) ์•จ๋ฆฌ๋จผํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ
    -> <input>, <textarea>, <select> ๋“ฑ
    • React์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์˜ state๋กœ ๊ด€๋ฆฌ
  • onChange ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ e.target.value๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” input ๊ฐ’์„ ์ฝ์–ด์˜ด

2๏ธโƒฃ onClick

  • ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
  • onClick ์ด๋ฒคํŠธ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์‹œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๊ฐ€ onClick์— ์ ์šฉ๋˜๋ฏ€๋กœ onClick ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์ „๋‹ฌ ์‹œ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๊ณ  ์ด ๋•Œ arrow function์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง„ state์— ํ•จ์ˆ˜๋“ค์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ

๐Ÿ”… Controlled Component

Controlled Component

๐Ÿ”… React ๋ฐ์ดํ„ฐ ํ๋ฆ„

React ๊ฐœ๋ฐœ ๋ฐฉ์‹โ“

React ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ํŽ˜์ด์ง€ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ ์ธ๋ฐ ์ด๋ ‡๋“ฏ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ์ƒํ–ฅ์‹ ๋ฐฉ๋ฒ•์œผ๋กœ ์•ฑ์„ ๋งŒ๋“ ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœ์„ ํ•  ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฝ๊ณ  ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋””์ž์ธ ํ•  ๋•Œ๋Š” ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์— ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•œ๋‹ค๋ผ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

React ๋ฐ์ดํ„ฐ ํ๋ฆ„๐Ÿค“

  • ์ปดํฌ๋„ŒํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ props๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์น˜ ์ธ์ž(arguments)๋‚˜ ์†์„ฑ(attribute)์ฒ˜๋Ÿผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ฃผ์ฒด๋Š” ๋ถ€๋ชจ(์ƒ์œ„) ์ปดํฌ๋„ŒํŠธ
    • ์ด๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ํ•˜ํ–ฅ์‹(top-down)์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • React๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„(one-way data flow)๋ฅผ ๋”ฐ๋ฆ„

1๏ธโƒฃ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ •์˜

  • ์ƒํƒœ(state)๋กœ ๋‘์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉ
  • ์ƒํƒœ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด
    • ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ๋‹ค
    • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค
    • ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ๋‹ค๋ฅธ state๋‚˜ props๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

2๏ธโƒฃ ์ƒํƒœ ์œ„์น˜ ์ •ํ•˜๊ธฐ

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜๋‚˜์˜ state์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•  ๋•Œ ๊ณตํ†ต ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— state๋ฅผ ์œ„์น˜์‹œ์ผœ์•ผ ํ•จ

React Twittler SPA

css๋ฅผ ์ž…ํžŒ React Twittler SPA๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป

<์˜ค๋Š˜์˜ ์ผ๊ธฐ>
React ์žฌ๋ฏธ์žˆ๊ณ  ํ•  ๋งŒํ•˜๋„ค ์ƒ๊ฐํ–ˆ๋˜ ํ•˜๋ฃจ ์ „์˜ ๋‚˜.. ๊ณผ์ œํ•˜๋ฉด์„œ ์šธ ๋ป”ํ•œ ์ˆœ๊ฐ„์ด ํ•œ ๋‘๋ฒˆ์ด ์•„๋‹ˆ์—ˆ๋‹ค...ใ…Ž ํŽ˜์–ด๋ถ„์ด ์—†์—ˆ๋‹ค๋ฉด ์•„์ง๊นŒ์ง€ ๋ฐฉํ–ฅ์กฐ์ฐจ ํ—ค๋งค๊ณ  ์žˆ์—ˆ์„ ๋‚˜์˜ ๋ชจ์Šต์ด ๋ถ„๋ช…ํ•œ๋ฐ ๋‹คํ–‰ํžˆ๋„ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์ข‹์€ ํŽ˜์–ด๋ถ„์„ ๋งŒ๋‚˜ ๋„์›€์„ ๋งŽ์ด ๋ฐ›๊ณ  ์–ด๋Š ์ •๋„์˜ ๋ฐฉํ–ฅ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๋ฆฌ์•กํŠธ์˜ props์™€ state๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋ ‡๊ฒŒ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง€๋‹ค๋‹ˆ.. ํ™•์‹คํ•˜๊ฒŒ ๊ณต๋ถ€ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์„ ๋งŽ์ด ๋ฐ˜์„ฑํ•ด์•ผ๊ฒ ๋‹ค. ๋” ์—ด์‹ฌํžˆ ๋„์ „ํ•ด์„œ ๊ผญ ๋๊นŒ์ง€ ์„ฑ๊ณต์‹œ์ผœ๋ด์•ผ๊ฒ ๋‹ค..
๋ฌผ๋ก  ๋‹ค๋ฅธ ์œ ๋‹›์—์„œ ๋งŒ๋‚ฌ๋˜ ํŽ˜์–ด๋ถ„๋“ค๋„ ๋ฐฐ์šธ ์ ์ด ๋งŽ๊ณ  ์ •๋ง ์ข‹์€ ๋ถ„๋“ค์ด์—ˆ์ง€๋งŒ ์ด๋ฒˆ ์œ ๋‹›์—์„œ ํŠนํžˆ ์ •๋ง ์ฒœ์‚ฌ๊ฐ™์€ ํŽ˜์–ด๋ถ„์„ ๋งŒ๋‚˜๊ฒŒ ๋œ ๊ฒƒ์— ๊ฐ์‚ฌํ•œ ์œ ๋‹›(?)์ด์—ˆ๋‹ค.

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