1. Props
๊ธฐ๋ณธ์ ์ผ๋ก Component์ ์ํ๋ ๊ฐ์ ๋๊ฒจ์ค ๋ ์ฌ์ฉํ๋ฉฐ, ๋๊ฒจ์ค ์ ์๋ ๊ฐ์ ๋ณ์, ํจ์, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ JavaScript์ ์์๋ผ๋ฉด ์ ํ์ด ์๋ค. ์ฃผ๋ก Component์ ์ฌ์ฌ์ฉ์ ์ํด ์ฌ์ฉํ๋ค.
/* 1. ์ปดํฌ๋ํธ ์์ฑ */
const Welcome = (props) => {
return <h1>Hello, {props.name}</h1>
}
/* 2. ์ปดํฌ๋ํธ ์ฌ์ฉ */
const App = () => {
return <div>
<Welcome name="์์" />
<Welcome name="๋ฏผ์" />
<Welcome name="์ํฌ" />
</div>;
}
Props๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค. ๋ฐ๋ผ์, Props ๊ฐ์ ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด Props์ ๊ฐ์ ์์๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ก์ด ๋ณ์๋ฅผ ์์ฑํด์ ํด๋น ๊ฐ์ ๋ณต์ ํ ๋ค ์ํ๋ ๋๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๋ค.
1-1. DOM Element์ Attributes
- ๊ธฐ๋ณธ์ ์ธ DOM Element(div, span ๋ฑ)๋ค์ Attribute๋ camel case๋ก ์์ฑํ๋ค.
- ์) tabIndex, className ๋ฑ
- ๊ทธ๋ฌ๋ 'data-' ๋๋ 'aria-'๋ก ์์ํ๋ Attribute๋ ์์ธ๋ค.
- ์) data-type, aria-label ๋ฑ
- HTML์ Attribute์ ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ง๋ Attribute๊ฐ ์๋ค.
- ์) class โก className, for โก htmlFor ๋ฑ
- HTML์ Attribute์ ๋ค๋ฅธ ๋์ ๋ฐฉ์์ ๊ฐ์ง Attribute๊ฐ ์๋ค.
- ์) checked(defaultChecked), value(defaultValue), style ๋ฑ
- HTML์์ checked ๋๋ value๋ ํด๋น ๊ฐ์ด ์ด๊ธฐ๊ฐ์ผ๋ก ์ฐ์ด์ง๋ง, React์์๋ ํ์ฌ ๊ฐ์ ์๋ฏธํ๋ค.
- ๋ฐ๋ผ์ ์ด๊ธฐ๊ฐ์ ์๋ฏธ๋ก checked๋ value๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, default~~๋ฅผ ์ค์ ํด์ผ ํ๋ค.
- React์์๋ง ์ฐ์ด๋ ์๋ก์ด Attribute๊ฐ ์๋ค.
- ์) key, dangerouslySetInnerHTML ๋ฑ
- key๋ React๊ฐ ์ด๋ค ํญ๋ชฉ์ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ญ์ ํ ์ง ์๋ณํ๋ ๊ฒ์ ๋๋๋ค.
- key๋ Element์ ์์ ์ ์ธ ๊ณ ์ ์ฑ์ ๋ถ์ฌํ๊ธฐ ์ํด ๋ฐฐ์ด ๋ด๋ถ์ Element์ ์ง์ ํด์ผ ํ๋ค.
- key๋ ๋ฐฐ์ด ๋ด์ ํ์ ์ฌ์ด์์ ๊ณ ์ ํด์ผ ํ๋, ์ ์ฒด ๋ฒ์์์ ๊ณ ์ ํ ํ์๋ ์๋ค.
- ๋ ๊ฐ์ ๋ค๋ฅธ ๋ฐฐ์ด์ ๋ง๋ค ๋ ๋์ผํ key๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
2. State
State๋ ์ปดํฌ๋ํธ ๋ด์์ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. State๋ Component ๋ด์์ ์ ๋์ ์ผ๋ก ๋ณํ ์ ์๋ ๊ฐ์ ์ ์ฅํ๋ค. ๊ฐ๋ฐ์๊ฐ ์๋ํ ๋์์ ์ํด ๋ณํ ์๋ ์๊ณ , ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ์๋ ์๋ค. State ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ์ฌ๋ ๋๋ง์ด ํ์ํ ๊ฒฝ์ฐ์ React๊ฐ ์๋์ผ๋ก ๊ณ์ฐํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ๋ ๋๋งํ๋ค. state๋ฅผ ๋ฐ๊พธ๋ฉด ํจ์๊ฐ ๋ค์ ์คํ๋๋ค.
/* State์ ์ ์ธ */
import { useState } from "react";
const App = () => {
const [value, setValue] = useState(์ด๊ธฐ๊ฐ);
return ...
}
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>๋ฒํผ์ {count}๋ฒ ๋๋ ์ต๋๋ค.</p>
<button onClick={() => setCount(count + 1)}>ํด๋ฆญ</button>
</div>
);
}
2-1. State๋ฅผ ์ฌ์ฉํ ๋ ์ ์ํ ์
1) State ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ์ง ๋ง ๊ฒ
- State ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด, React๊ฐ Component๋ฅผ ๋ค์ ๋ ๋๋งํ ํ์ด๋ฐ์ ์์์ฐจ๋ฆฌ์ง ๋ชปํ๋ฏ๋ก ๋ฐ๋์ setState ํจ์๋ฅผ ์ด์ฉํด์ ๊ฐ์ ๋ณ๊ฒฝํด์ผ ํ๋ค.
- setState ํจ์๋ฅผ ํธ์ถํ ๋ React์๊ฒ '๋ค์ ๋ ๋๋ง ํด์ฃผ์ธ์' ๋ผ๋ ๋ช ๋ น์ด ๋ด๋ ค์ง๋ค.
/* 1. setState์ ๋ณ๊ฒฝํ ๊ฐ์ ๋ฃ๊ธฐ */
const [count, setCount] = useState(0);
setCount(count + 1);
/* 2. setState์ ํจ์๋ฅผ ๋ฃ๊ธฐ */
const [count, setCount] = useState(0);
setCount((current) => { // ๋งค๊ฐ๋ณ์๋ก ํ์ฌ count ๊ฐ์ ๋ฐ๊ฒ ๋๋ค.
return current + 1 // return ๊ฐ์ผ๋ก State๊ฐ ๋ณ๊ฒฝ๋๋ค.
});
- Object๋ฅผ ๊ฐ๋ State๋ฅผ ๋ง๋ค ๋ ์ฃผ์์ฌํญ
/* Object State์ ์๋ชป๋ ์์ */
const [user, setUser] = useState({name: "๋ฏผ์", grade: 1})
setUser((current) => {
current.grade = 2;
return current;
})
์์ ๊ฐ์ด Object๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ State๋ ๋ง๋ค ์ ์์ผ๋, ์ ์์์ ๊ฒฝ์ฐ React๊ฐ State์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ค. user object ์์ grade๊ฐ ๋ณ๊ฒฝ๋์์ง๋ง user ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
/* Object State์ ์ฌ๋ฐ๋ฅธ ์์ */
const [user, setUser] = useState({name: "๋ฏผ์", grade: 1})
setUser((current) => {
const newUser = { ...current } // ๊ธฐ์กด ๊ฐ์ spread๋ก ๋ณต์ฌ
newUser.grade = 2
return newUser
})
๋ฐ๋ผ์, ๊ธฐ์กด user์ ๋ด์ฉ์ ๋ณต์ฌํด์ ์๋ก์ด Object์ ๋ด๊ณ grade๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
3. ๋ ๋๋ง์ด ๋๋ ๊ฒฝ์ฐ
1) ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋์ ๋
2) props์ ๋ณ๊ฒฝ์ด ์๊ฒผ์ ๋
3) state๊ฐ ๋ณ๊ฒฝ๋์ ๋
'elice > WIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[week_08] React ๊ธฐ์ด โ ก (1) ์ด๋ฒคํธ (0) | 2022.03.02 |
---|---|
[week_08] React ๊ธฐ์ด โ (4) React ํ๋ก์ ํธ ์์ฑ (0) | 2022.02.28 |
[week_08] React ๊ธฐ์ด โ (2) JSX์ ์ปดํฌ๋ํธ (0) | 2022.02.28 |
[week_08] React ๊ธฐ์ด โ (1) OT (0) | 2022.02.28 |
[week_07] 3๊ณ์ธต ์ค๊ณ (3-Layer architecture) (0) | 2022.02.26 |