๊ฐ์ - Section 5 : React.js ์ ๋ฌธ
์ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/
์ธํ๋ฐ :
[2024] ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ(React.js) : ๊ธฐ์ด๋ถํฐ ์ค์ ๊น์ง ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | ๊ฐ๋ ๋ถํฐ ๋ ํนํ ํ๋ก์ ํธ๊น์ง ํจ๊ป ๋ค๋ค๋ณด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฆฌ์กํธ๋ฅผ ์ด ๊ฐ์๋ก ํ ๋ฒ์ ๋๋ด์. ํ์ต์ ์งง๊ฒ, ์์ฉ์ ๊ธธ๊ฒ 17์๊ฐ ๋ถ๋์ All-in-one ๊ฐ์!, ๋ฆฌ์กํธ, ํ ๊ฐ์๋ก
www.inflearn.com
์ค์ต ์ค๋นํ๊ธฐ
1. ESLint ์ค์น

1.1 ์ค์น ํ eslint.config.js ํ์ผ rules์ ๋งจ ์๋ ๋์ค ์ถ๊ฐ

- "no-unused-vars" : " off" => ์ฌ์ฉ๋์ง ์๋ ๋ณ์์ ๋ํด ์๋ฌ๋ฅผ ์ถ๋ ฅํ์ง ์๋๋ก ํจ
- "react/prop-types" : "off" => React ์ปดํฌ๋ํธ์์ prop-types ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ์ง ์๋๋ก ์ค์
React.js ์ ๋ฌธ
React ์ปดํฌ๋ํธ
* ์ปดํฌํดํธ๋ ? UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์ด๋ค. ํ ๋ฒ ์์ฑํ ๋ค ์ฌ๋ฌ๊ณณ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ํตํด ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
* ์ปดํฌ๋ํธ์ ์ข ๋ฅ
- ํจ์ํ ์ปดํฌ๋ํธ : JavaScript ํจ์์ฒ๋ผ ์ ์ํ๋ฉฐ, React Hooks๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ค. ๊ฐ๊ฒฐํ๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ํจ์ ์ด๋ฆ์ ์ฒซ๊ธ์๋ ๊ผญ! ๋๋ฌธ์๋ก ์์ฑ
const Greeting = ({ name }) => <h1>Hello, {name}!</h1>;
- ํด๋์คํ ์ปดํฌ๋ํธ : ES6 ํด๋์ค ๋ฌธ๋ฒ์ ์ฌ์ฉ, state์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ง์ ๋ค๋ฃฐ ์ ์๋ค. ์ ์ฐจ ๋ ์ฌ์ฉํ๋ ์ถ์ธ
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
* Root ์ปดํฌ๋ํธ(App.jsx)
function Header() {
return (
<header>
<h1>header</h1>
</header>
)
}
function App() {
return (
<>
<Header/>
<h1>์๋
๋ฆฌ์กํธ</h1>
</>
)
}
export default App
- Root ์ปดํฌ๋ํธ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ด ๋๋ ์ปดํฌ๋ํธ์ด๋ค. App ์ปดํฌ๋ํธ๋ ๋ณดํต React ์ฑ์ ๊ฐ์ฅ ์์ ์ปดํฌ๋ํธ๋ก ๋์ํ๋ฉฐ, ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ํ์ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๋ค.
(์ฌ๊ธฐ ์์์ App์ ๋ถ๋ชจ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, Header๋ ์์ ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ : ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๊ฑฐ๋ ํธ์ถํ์ฌ ํ๋ฉด์ ๋ ๋๋ง ํ๋ ์ปดํฌ๋ํธ
- ์์ ์ปดํฌ๋ํธ : ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ํธ์ถ๋์ด ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ. ํ์ํ๋ฉด ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋ค.)
- ์๋ ์์๋ฅผ ์ํ ์ฝ๋์ด๊ณ , ๋ณดํต ๋ชจ๋ํ๋ฅผ ์ํด ์ปดํฌ๋ํธ๋ค์ ๊ฐ๊ฐ ํ์ผ์ ๋๋ ์ ์์ฑํ๋๊ฒ ์ผ๋ฐ์ ์ด๋ค.
React.js ์ ๋ฌธ
JSX - UI ํํํ๊ธฐ
* JSX๋? React์์ ์ฌ์ฉํ๋ JavaScript ๋ฌธ๋ฒ ํ์ฅ์ด๋ค. HTML๊ณผ ๋น์ทํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ UI๋ฅผ ์ ์ํ ์ ์๋๋ก ์ค๊ผ๋์์ผ๋ฉฐ, React ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๋ค.
์ฆ, JavaScript ์ฝ๋ ์์์ HTML์ฒ๋ผ ๋ณด์ด๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ํด์ค๋ค
* JSX์ ํน์ง
1. HTML๊ณผ ๋ฌธ๋ฒ์ด ์ ์ฌํ๋ค. ์ ์ฌํ ๋ฌธ๋ฒ์ด์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋๊ธฐ ์ ์ JavaScript๋ก ๋ณํ๋๋ค.
// ์์ ๋ฌธ๋ฒ์ด ์๋์ ๊ฐ์ด ๋ณํ๋๋ค
const element = <h1>Hello!</h1>;
const element = React.createElement('h1', null, 'Hello, World!');
2. JSX์์์ JavaScript ํํ์์ { }๋ฅผ ์ฌ์ฉํด ์ฝ์ ํ ์ ์๋ค.
const name = "React";
const element = <h1>Welcome to {name}!</h1>;
* JSX์ ์ฃผ์ ๊ท์น
1. ํ๋์ ๋ถ๋ชจ ์์๋ก ๊ฐ์ธ์ผํ๋ค(์ต์์ ํ๊ทธ๋ ๋ฐ๋์ ํ๋์ฌ์ผ ํ๋ค)
// ์๋ชป๋ ์ฝ๋
return (
<h1>Header</h1>
<p>Paragraph</p>
);
// ์ฌ๋ฐ๋ฅธ ์ฝ๋
return (
<div>
<h1>Header</h1>
<p>Paragraph</p>
</div>
);
2. class ๋์ className ์ฌ์ฉ
<div className="container">Hello, JSX!</div>
3. self-closing ํ๊ทธ (๋ด์ฉ์ด ์๋ ํ๊ทธ๋ ๋ฐ๋์ self-closing์ผ๋ก ์์ฑํด์ผ ํ๋ค)
<img src="image.jpg" alt="Example" />
4. ์ค๊ดํธ ๋ด๋ถ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์๋ง ๋ฃ์ ์ ์๋ค(์ซ์, ๋ฌธ์์ด, ๋ฐฐ์ด ๊ฐ๋ง ๋ ๋๋ง ๋๋ค)
const items = [1, 2, 3];
return <ul>{items.map(item => <li key={item}>{item}</li>)}</ul>;
'IT > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 3 (0) | 2024.11.25 |
---|---|
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 2 (1) | 2024.11.22 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ๊ฐ๋ก (1) | 2024.11.15 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - Node.js ๊ธฐ์ด (5) | 2024.11.01 |
[React] ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ (STATE #1) (0) | 2024.02.22 |