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

Props, State์˜ ํŠน์ง•๊ณผ ์ด๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“๋ฐฐ์šด ๊ฒƒ

โœ”๏ธ Props

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

Props ์‚ฌ์šฉ๋ฒ•

  1. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๋ ค๋Š” ๊ฐ’(data)๊ณผ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค.
  2. props๋ฅผ ์‚ฌ์šฉํ•ด ์ •์˜๋œ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ๋ Œ๋”๋ง ํ•œ๋‹ค.

<parent>, <child> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

  • <parent> ์ปดํฌ๋„ŒํŠธ ์•ˆ์— <child> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
function Parent(){
	return(
    	<div className="parent">
      		<Child />
      	</div>
    )
}

funtion Child(){
	return(
    	<div className="child"></div>
    )
}
  1. {,} ์‚ฌ์šฉ
  2. ๋ฌธ์ž์—ด๋„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.(text)
<Child attribute={value} />
<Child text={"..."} />
  1. <Parent>์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ
function Child(props){
	return(
    	<div className="child"></div>
    )
}
  1. ์ „๋‹ฌ ํ›„ props ๋ Œ๋”๋ง ํ•˜๊ธฐ(props๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜)
function Child(props){
	return(
    	<div className="child">
      		<p>{props.text}</p>
      	</div>
    )
}

props๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

props.children ์‚ฌ์šฉํ•˜๊ธฐ

  • ์—ฌ๋Š”/๋‹ซ๋Š” ํƒœ๊ทธ ์‚ฌ์ด์— value๋ฅผ ๋„ฃ์–ด ์ „๋‹ฌํ•œ๋‹ค.
  • props.children ์‚ฌ์šฉ ์‹œ ํ•ด๋‹น value์— ์ „๊ธ‰ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
function Parent(){
	return(
    	<div className="parent">
      		<Child>I'm Child</Child>
      	</div>
    )
}

function Child(props){
	return(
    	<div className="child">
      		<p>{props.children}</p>
      	</div>
    )
}

โœ”๏ธ State(์ƒํƒœ)

  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’
  • state ์‚ฌ์šฉ ์‹œ ์›น์ด App์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
    - ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ HTML์ด ์ž๋™์œผ๋กœ ์žฌ๋ Œ๋”๋ง ๋œ๋‹ค.(์ƒˆ๋กœ๊ณ ์นจ x)
  • state ๋ฒˆ์ˆ˜๋Š” React์— ์˜ํ•ด ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

state hook, useState

  • useState ์‚ฌ์šฉ์„ ์›ํ•  ๊ฒฝ์šฐ useState๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผํ•œ๋‹ค.(import)
import { userState } from "react"

๋ฌธ๋ฒ• 1

const [state์— ์ €์žฅํ•  ๋ณ€์ˆ˜, ํ˜„์žฌ state๋ฅผ ๊ฐฑ์‹ ํ•  ๋ณ€์ˆ˜] = useState(state์ดˆ๊ธฐ ๊ฐ’ ํ• ๋‹น)

function CheckboxExample(){
	const[isCheckde, setIsCheckde] = useState(false)
}

๋ฌธ๋ฒ• 2

const stateHookArray = useState(false);
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
  • useState๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    - ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์š”์†Œ : ํ˜„์žฌ state ๋ณ€์ˆ˜ ๊ฐ’
    - ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ ์š”์†Œ : ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
    - useState์˜ ์ธ์ž : state์˜ ์ดˆ๊ธฐ๊ฐ’
  • ๋ณ€์ˆ˜ ๋Œ€์‹  ์“ฐ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์„ ๋งŒ๋“ ๋‹ค.(array, objec์ธ ๊ฒฝ์šฐ)
  • useSate()๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ ๋‹ค.
  • string, number, array, object ๋“ฑ ์ €์žฅ ๊ฐ€๋Šฅ

states๋Š” ๊ฐ’ ๋ณ€๊ฒฝ์„ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.(๊ฐ•์ œ x)

  • ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋งx, state๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ ์•ˆ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜์™€ ์ฐจ์ด์ 

  • ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ๋œ๋‹ค.(์žฌ๋ Œ๋”๋ง x)
  • state๋Š” ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค. (๋ Œ๋”๋ง o)

์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜ ๋Œ€์‹  state๋กœ ์ €์žฅํ•œ๋‹ค.

โœ”๏ธ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

  • ์นด๋ฉœ์ผ€์ด์Šค(camelCase) ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • JSX์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ
<button onClick={hadleEvent}>...</button>

{hadleEvent()}์ฒ˜๋Ÿผ ()๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

- onChange

  • input์˜ ํ…์ŠคํŠธ๊ฐ€ ๋ฐ”๋€” ๋–„ ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
function NameForm(){
	const[name, setName] = useSate("");
  	const handleChange = (event) => {
    	setName(event.target.value);
    }
}

return(
	<input type="text" value={name} onChange={handleChange}></input>
  <h1>{name}</h1>
)

- onClick

  • ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ ํ–ˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
  • onClick์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ ํ•  ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์•„๋‹Œ ๋ฆฌํ„ด๋ฌธ ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ„ด๋ฌธ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ›„ ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์ž์ฒด์— ์ „๋‹ฌ
return(
	<button onClick={() => alert(name)}></button>
)

{/*ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. */}
const handleClick = () => {
	alert(name);
}
return(
	<button onClick={handleClick}>
)

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

props์™€ state์˜ ์ฐจ์ด์ ์€ ์•Œ๊ฒŒ๋˜์—ˆ์ง€๋งŒ
์•„์ง๋„ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์ดํ•ด ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์ด ๋ช‡๊ฐ€์ง€ ์กด์žฌํ•œ๋‹ค.

์ดํ•ด ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์€ ๋งŽ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ–์— ์—†์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

๋˜ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋Š” Javascript์™€ ๋น„์Šทํ•˜๋ฉด์„œ ๋งŽ์ด ๋‹ค๋ฅธ ๊ฑฐ ๊ฐ™๋‹ค.
{ํ•จ์ˆ˜()}, {ํ•จ์ˆ˜} ์ด ๋‘๊ฐ€์ง€ ์ฐจ์ด์ ์„ ์ž˜ ์•Œ๊ณ  ์ž‘์„ฑํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™๋‹ค.

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

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