๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/React

[ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ] - React.js ์ž…๋ฌธ 1

by YeonBu 2024. 11. 19.
728x90

 


๊ฐ•์˜ - Section 5 : React.js ์ž…๋ฌธ

์œ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/

์ธํ”„๋Ÿฐ : 

 

[2024] ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ(React.js) : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ

์ด์ •ํ™˜ Winterlood | ๊ฐœ๋…๋ถ€ํ„ฐ ๋…ํŠนํ•œ ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ฆฌ์•กํŠธ๋ฅผ ์ด ๊ฐ•์˜๋กœ ํ•œ ๋ฒˆ์— ๋๋‚ด์š”. ํ•™์Šต์€ ์งง๊ฒŒ, ์‘์šฉ์€ ๊ธธ๊ฒŒ 17์‹œ๊ฐ„ ๋ถ„๋Ÿ‰์˜ All-in-one ๊ฐ•์˜!, ๋ฆฌ์•กํŠธ, ํ•œ ๊ฐ•์˜๋กœ

www.inflearn.com


 

 

React.js ์ž…๋ฌธ

์‹ค์Šต ์ค€๋น„ํ•˜๊ธฐ

 

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>;

 

 

๋ฐ˜์‘ํ˜•