๋์ธ ํ๋ก ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๋ฆฌ์ํธ๋ก ๊ฐ๋ฐ์ ํ๊ธฐ์ ์์ ๊ฐ๊ธ์ ์ด๋ฉด ๊ผญ ์ง์ผ์ผํ ๋ถ๋ถ์๋ค ์ ๋ฆฌํ์์ต๋๋ค. ์ต๊ด์ ์ผ๋ก ์๋ ๋ด์ฉ๋ค์ ๋ฐ๋์ ์์งํฉ์๋ค!
ํจ์ํ ์ปดํฌ๋ํธ์ ํ ์ ์ฌ์ฉ
React ํจ์ ์ปดํฌ๋ํธ์ ํ ์ ํด๋์ค์ ๋นํด ๋ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฏ๋ก ๋ ์์ฃผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ํ์ฌ์ฉ ํผํ๊ธฐ
React ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ ๋ ์ํ๋ฅผ ๋ง์ด ์ฌ์ฉํ ์๋ก ์ฑ ์ ์ฒด์์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํด์ผ ํ๋ฏ๋ก ์ํ๋ฅผ ์ต๋ํ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
์ํ ์ฌ์ฉ์ ์ต์ํํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํ์ํ ๋๋ง ์ ์ธํ๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด API์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ๊ฐ๋ณ ์์ฑ์ ์ ์ฅํ๋ ๋์ ์ ์ฒด ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ์ํ์ ์ ์ฅํฉ๋๋ค.
//๊ฐ๋ณ ์์ฑ ์ํ
const [username, setusername] = useState('');
const [password, setpassword] = useState('');
//์ ์ฒด ์ฌ์ฉ์ ๊ฐ์ฒด
const [user, setuser] = useState({});
๋์ผํ ๊ตฌ์ฑ์์์ ๊ด๋ จ๋ ํ์ผ์ ํ๋์ ํด๋์ ์ ๋ฆฌ
Navbar ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ Navbar ๊ตฌ์ฑ ์์ ์์ฒด, ์คํ์ผ ์ํธ, ๊ตฌ์ฑ ์์์ ์ฌ์ฉ๋ ๊ธฐํ JavaSript ๋ฐ ์์ฐ ํ์ผ์ ํฌํจํ๋ navbar๋ผ๋ ํด๋๋ฅผ ์์ฑํฉ๋๋ค.
์ธ๋ฑ์ค ํค๋ฅผ Props Key๋ก ์ฌ์ฉํ์ง ์๊ธฐ
์๋์ ๊ฐ์ด ์ธ๋ฑ์ค ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ก ์๋ํ์ง๋ง ์ธ๋ฑ์ค๋ฅผ ํค๋ก ์ฌ์ฉํ๋ฉด ํนํ ๋ชฉ๋ก์ด ๋ณ๊ฒฝ๋ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
//์ธ๋ฑ์ค ํค๋ฅผ ์ฌ์ฉ (X)
const Items = () => {
const arr = ['item1', 'item2', 'item3', 'item4', 'item5'];
return (
<>
{arr.map((elem, index) => {
<li key={index}>{elem}</li>;
})}
</>
);
};
๊ฐ๋ฅํ ๊ฒฝ์ฐ div ๋์ ์กฐ๊ฐ์ ์ ํํ์ญ์์ค.
<div>
๋ฅผ ์ฌ์ฉํ๋ฉด DOM ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํฉ๋๋ค. ํนํ ํ๊ทธ ๋๋ DOM ๋
ธ๋๊ฐ ๋ง์์๋ก ์น์ฌ์ดํธ์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ก๋ํ๋ ๋ฐ ๋ ๋ง์ ์ ๋ ฅ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ด๋ก ์ธํด ํ์ด์ง ์๋๊ฐ ๋๋ ค์ง๊ณ ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋ถํ์ํ <div>
ํ๊ทธ๋ฅผ ์ ๊ฑฐํ๋ ํ ๊ฐ์ง ์๋ ๋จ์ผ ์์๋ฅผ ๋ฐํํ ๋ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์
๋๋ค.
const Button = () => {
return <button>Display</button>;
};
๋ช ๋ช ๊ท์น ์ค์
๊ตฌ์ฑ ์์ ์ด๋ฆ์ ์ง์ ํ ๋ ํญ์ PascalCase๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ค๋ฅธ JSX ํ์ผ๊ณผ ๊ตฌ๋ณํด์ผ ํฉ๋๋ค. (์: TextField, NavMenu ๋ฐ SuccessButton)
handleInput() ๋๋ showElement()์ ๊ฐ์ React ๊ตฌ์ฑ ์์ ๋ด๋ถ์ ์ ์ธ๋ ํจ์์๋ camelCase๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ฐ๋ณต์ ์ธ ์ฝ๋ ํผํ๊ธฐ
์ค๋ณต๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฉด ์ฌ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ฑ ์์๋ก ๋ณํํ์ญ์์ค.
Props์ ๊ฐ์ฒด ๊ตฌ์กฐํ ์ฌ์ฉ
props ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๋์ ๊ฐ์ฒด ๊ตฌ์กฐํ๋ฅผ ์ฌ์ฉํ์ฌ props ์ด๋ฆ์ ์ ๋ฌํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉํ ๋๋ง๋ค props ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ํ์๊ฐ ์์ต๋๋ค.
//props ๊ทธ๋๋ก ์ฌ์ฉ
const Button = (props) => {
return <button>{props.text}</button>;
};
//๊ฐ์ฒด ๊ตฌ์กฐํ ์ฌ์ฉ
const Button = ({text}) => {
return <button>{text}</button>;
};
๋งต์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๋ฐฐ์ด ๋ ๋๋ง
map()์ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต๋๋ HTML ๋ธ๋ก์ ๋์ ์ผ๋ก ๋ ๋๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด map()์ ์ฌ์ฉํ์ฌ <li>
ํ๊ทธ์ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ ๋๋งํ ์ ์์ต๋๋ค.
const Items = () => {
const arr = ['item1', 'item2', 'item3', 'item4', 'item5'];
return (
<>
{arr.map((elem, index) => {
<li key={elem + index}>{elem}</li>;
})}
</>
);
};
๊ฐ React ๊ตฌ์ฑ ์์์ ๋ํ ํ ์คํธ ์์ฑ
์์ฑํ ๊ตฌ์ฑ ์์์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ํ ์คํธ๋ฅผ ํตํด ๊ตฌ์ฑ ์์๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค. React์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ ์คํธ ํ๋ ์์ํฌ ์ค ํ๋๋ Jest์ด๋ฉฐ ํ ์คํธ๋ฅผ ์คํํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
React Is a Powerful Tool, But You Must Follow Certain Practices
React๋ ์ฌ์ฉ ๋ฐฉ๋ฒ ์ธก๋ฉด์์ ๋ค์ ์ ์ฐํ์ง๋ง ํน์ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฒฝํ์ ์ต๋ํ ํ์ฉํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.