Props ๋ Properties
์ ์ค์๋ง์ด๊ณ , ์ปดํผ๋ํธ์ ์์ฑ์ ์๋ฏธํ๋ค.
์์ ์ปดํผ๋ํธ์์ ํ์ ์ปดํผ๋ํธ๋ก ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ฑ์ด๋ค.
ํน์ง
- ๊ฐ์ฒด ํํ๋ฅผ ๊ฐ๋๋ค.
- ์์์์ ํ์๋ก ๋จ๋ฐฉํฅ์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ๋๋ค. โฌ๏ธโญ๏ธ
- Props ๋ ์์ ํ ์ ์๋ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ด๋ค. โญ๏ธ
์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ด ์๋๋ผ๋ฉด props๋ฅผ ์ ๋ฌ๋ฐ์ ํ์ ์ปดํฌ๋ํธ ๋ด์์ props๋ฅผ ์ง์ ์์ ์ props๋ฅผ ์ ๋ฌํ ์์ ์ปดํฌ๋ํธ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ฒ ๋๋ค. ๋จ๋ฐฉํฅ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์๋ฐฐ ๋จ
Props๋ฅผ ์ฌ์ฉํ๋ ์์
1. ๋ถ๋ชจ์ ์ปดํฌ๋ํธ ๋ด๋ถ์ ์์ ์ปดํฌ๋ํธ๋ก ๋ณด๋ผ ๊ฐ๊ณผ ์์ฑ์ ์ ์ํ๋ค.
<Child user ={'๋๋' + userName }/>
- ์์ฑ =
user
- ์ ๋ฌํ๊ณ ์ ํ๋ ๊ฐ์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํด ๊ฐ์ธ์ค๋ค
{'๋๋' + userName }
2. ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ์ธ์์ props๋ฅผ ์ฃผ๊ณ ๋ด๋ถ์๋ props์ ์์ฑ์ ์ ๋ฌํ๋ค.
function Child(props){ return ( <div> <p>{props.user}</p> </div> )}
- ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ์ธ์์ props ๋ฅผ ์ ์ผ๋ฉด ์ด props ๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋ค.
- props๊ฐ ๊ฐ์ฒด์ด๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ํํ์ธ
{key : value}
์ ๋์ผํ ํํ๋ฅผ ๋ ๊ฒ ๋๋ค.
์์ ์์์ props ๊ฐ์ฒด ํํ๋ก๋{user : '๋๋'+ userName}
ํํ์ธ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ์ปดํฌ๋ํธ์์dot notation
์ผ๋ก ์ ๊ทผํ ์ ์๋ ๊ฒ์ด๋ค.{props.user}
3. ์ ๋ฌ๋ฐ์ props๋ฅผ ๋ ๋๋งํ๋ค.
Props ๋ฅผ ์ ๋ฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ์์ด๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ ์ฌ์ด์ ๋ฃ๋ ๋ฐฉ๋ฒ์ด๋ค.
์์ ์ปดํฌ๋ํธ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ๋ ค๋ฉด ์์ฑ๋ช
์ children
์ผ๋ก ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
State ๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ์ ์๋ฏธํ๊ณ , State(์ํ) ๋ React state
๋ก ๋ค๋ค์ผ ํ๋ค.
(props๋ ๋ณํ์ง ์๋ ๊ฐ, ์ฝ๊ธฐ ์ ์ฉ ๊ฐ!)
React ์์ stat๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก useState
๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
useState ์ฌ์ฉ๋ฒ
1. ์ฌ์ฉํ ๋ ค๋ฉด React ๋ก ๋ถํฐ useState
๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
import {useState} from 'react';
2. ์ดํ ์ปดํฌ๋ํธ ๋ด๋ถ์์ useState
๋ฅผ ํธ์ถํด์ค๋ค. ํธ์ถํ๋ค๋ ๊ฒ์ stat
๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒ๊ณผ ๊ฐ๊ณ , ์ด๋ฆ์ ์๋ฌด๋ ๊ฒ๋ ์ง์ด๋ ๋๋ค.
useState
๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ๊ธธ์ด๊ฐ 2์ธ ๋ฐฐ์ด
์ ๋ฐํํ๋๋ฐ ๋ฐฐ์ด[0] ์์๋ ํ์ฌ State ๋ณ์
์ด๊ณ
๋ฐฐ์ด[1] ์์๋ ์ด ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์
์ด๋ค.
function App(){ const [user, isUserCheck] = useState(์ด๊ธฐ๊ฐ)
user
: ํ์ฌ State ๋ณ์
isUserCheck
: stateuser
๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์
useState
: state hook
์ด๊น๊ฐ
: state ์ด๊น๊ฐ
state๋ฅผ ๊ฐฑ์ ํ ๋ ค๋ฉด ํ์ฌ state ๋ณ์
๋ฅผ ๊ฐฑ์ ํ ์ ์๋ isUserCheck
๋ฅผ ํธ์ถํด์ผํ๋ค์.
๊ฐฑ์ ์ด ํ์ํ๋ค๋ ๋ง์ ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ ๋ง์ด๋ ๋ณดํต์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ํตํด State๋ณ์๋ฅผ ๊ฐฑ์ ํ๊ฒ ๋ฉ๋๋ค.
์ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ํด๋ฆญ์ด๋ฒคํธ๋ฅผ ์๋ฅผ ๋ค์ด๋ณด๋ฉด
ํด๋ฆญ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค? ---> ํด๋น ์ด๋ฒคํธ์ ๋ํ ํธ๋ค๋ฌ ํจ์ ํธ์ถ ---> ํธ๋ค๋ฌ ํจ์์ ๋ด๋ถ์ ์๋
ํ์ฌ state ๋ณ์
๋ฅผ ๊ฐฑ์ ํ ์ ์๋isUserCheck
๋ฅผ ํธ์ถ ---> ํธ์ถ๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผuser
๋ณ์๊ฐ ๊ฐฑ์ ---> ๊ฐฑ์ ๋user
๋ณ์๋ฅผApp
์ปดํฌ๋ํธ์ ๋๊ฒจApp
์ปดํฌ๋ํธ ๋ค์ ๋ ๋๋ง
์ฌ์ง์ ๋ณด๋ฉด์ ์์๋ฅผ ์๊ฐํด๋ณด๋ผ!
์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ ๋๋ง๋ค ์ฝ์์ rerendered?
๊ฐ ์ฐํ๋๊ฑธ ๋ณผ ์ ์๋ค. ์ฆ, ๊ฐฑ์ ๋ ํ์ฌ state
๋ณ์ user
๋ก ์ธํด App
์ปดํฌ๋ํธ๊ฐ ๊ณ์ ๋ ๋๋ง๋๊ณ ์๋๊ฑธ ์ ์ ์๋ค!
- ์ฃผ์
React state๋ ์ํ ๋ณ๊ฒฝ ํจ์ ํธ์ถ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค. ๊ฐ์ ๋ก ๋ณ๊ฒฝ์ ์๋ํ๋ฉด, ๋ฆฌ๋ ๋๋ง์ด ๋์ง ์๋๋ค๊ฑฐ๋, state๊ฐ ์ ๋๋ก ๋ณ๊ฒฝ๋์ง ์๋๋ค.
- React์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฌ์ฉ์ DOM์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฌ์ฉ ๋ฐฉ์๊ณผ ์ ์ฌํ์ง๋ง ์ฐจ์ด์ ๋ ์๊ธดํ๋ค.
- React ์์ ์ด๋ฒคํธ๋ ์๋ฌธ์ ๋์ ์นด๋ฉ ์ผ์ด์ค(camelCase) ๋ฅผ ์ฌ์ฉํ๋ค.
- JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ด ์๋ ํจ์๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ ํจ์(์ด๋ฒคํธ ํธ๋ค๋ฌ; Event handler)๋ฅผ ์ ๋ฌํ๋ค.
DOM์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฌ์ฉ๋ฐฉ์
<button onclick="handleEvent()">Event</button>
React์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฌ์ฉ๋ฐฉ์
<button onClick={handleEvent}>Event</button>
React๋ state(์ํ) ์ฆ, ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ดํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ state๋ฅผ ํต์ ํ ์ ์๋ ์ปดํฌ๋ํธ ๊ฐ ์กด์ฌํ๋๋ฐ ์ด๋ฅผ Controlled Component
๋ผ๊ณ ํ๋ค.
์ํ๋ ์ต์ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค. ์ํ๊ฐ ๋ง์์ง์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ถ๋ชจ๋ก ๋ถํฐ props๋ฅผ ํตํด ์ ๋ฌ๋๋์ง? (Y/N)
- ์๊ฐ์ด ์ง๋๋ ๋ณํ์ง ์๋์ง? (Y/N)
- ์ปดํฌ๋ํธ ์์ ๋ค๋ฅธ state ๋ props ๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐ์ด ๊ฐ๋ฅํ์ง? (Y/N)
๋๋ต์ด Y
๋ผ๋ฉด State ๊ฐ ์๋๋ค. ๐คข
์ํ(State)๊ฐ ํน์ ์ปดํฌ๋ํธ์์๋ง ์ ์๋ฏธํ๋ค๋ฉด ๊ทธ ์ปดํฌ๋ํธ์๋ง ์ํ๋ฅผ ๋๋ฉด ๋๋๊น ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง
๋ง์ฝ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ํน์ ์ํ(State) ์ ์์กด์ ์ผ ๊ฒฝ์ฐ์๋?
๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ณต๋์ ์ผ๋ก ์์ ํ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์์ ๊ฑฐ๊ธฐ์ ์ํ๋ฅผ ๋์ด์ผ ํ๋ค!