๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

[React] JSX ๋ฌธ๋ฒ• ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ์ด๋ฆฌ์˜จ : )

728x90

 

 

 


 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ณธ๊ฒฉ์ ์œผ๋กœ JSX ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค

 

1๏ธโƒฃ index.js

  const root = ReactDOM.createRoot(document.getElementById('root'));

  root.render(            
  	 <React.StrictMode>   
   	    <App />          
	 </React.StrictMode>
  );

 

root์˜ render ํ•จ์ˆ˜๋Š” App ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ณ , ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์žˆ๋Š” <React.StrictMode>๋Š” ์˜›๋‚  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค

 

 

 

2๏ธโƒฃ App.js

  import React from 'react';
  import logo from './logo.svg';
  import './App.css';

  function App() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
    );
  }

  export default App;

 

  App ํ•จ์ˆ˜๋Š” return๋ฌธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค ( return๋ฌธ ๋‚ด๋ถ€์—์„œ JSX ๋ฌธ๋ฒ•์ด ๋“ค์–ด๊ฐ )
 export default App์œผ๋กœ ๋ชจ๋“ˆ์„ ๋นผ๋‚ด๋ฉด, Index.js ํŒŒ์ผ์—์„œ <App/>๋กœ ์‚ฌ์šฉ๋œ๋‹ค

 

 

๊ทธ๋ ‡๋‹ด JSX๋Š” ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ๊ฐ€?

  JS์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ (HTML์— JS์ฝ”๋“œ๋ฅผ ๋…น์—ฌ๋‚ธ ํ˜•ํƒœ)์ด๋‹ค

 

  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ™”๋ฉด์ด ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค! ( ์›นํŒฉ ๋กœ๋”๊ฐ€ ๋™์ž‘ )

  Webpack Loader๋Š” ์ง์ ‘ ์„ค์ •๋„ ๊ฐ€๋Šฅํ•˜๊ณ , create react-app ์ƒ์„ฑ์‹œ ์ž๋™์œผ๋กœ ํ•ด์ค€๋‹ค

 

 

 Webpack Loader๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜ ๆœ‰

1๏ธโƒฃ css๋กœ๋” - css๋กœ๋”
2๏ธโƒฃ file ๋กœ๋” - ํฐํŠธ, ์ด๋ฏธ์ง€, ํŒŒ์ผ ๋“ฑ ๋กœ๋“œ
3๏ธโƒฃ babel ๋กœ๋” - ES6๋ฌธ๋ฒ•์„ ํ™”๋ฉด์—์„œ ์‚ฌ์šฉํ•  ES5๋ฌธ๋ฒ•์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ํ•ด์„œ ๋ณ€ํ™˜

 

JSX ๋ฌธ๋ฒ• ๊ณต๋ถ€๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ?

 

 

 

์œ„์˜ ๋‚ด์šฉ์ด๋ฉด JSX๋ฅผ ๋‹ค ๋ดค๋‹ค๊ณ  ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค ( Maybe...? ) 

ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋ฉด์„œ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ์ œ๋Œ€๋กœ ์•Œ๊ณ  ๊ฐ€์ž!

 

1๏ธโƒฃ ์ฃผ์„

  ์ฃผ์„ : alt + shift + a
  ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ฃผ์„์„ ๋‹ฌ ๋‚ด์šฉ์„ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค ๐Ÿ‘‰ { /* ์ฃผ์„ */ }

 

2๏ธโƒฃ return ๊ตฌ๋ฌธ

  return ๊ตฌ๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค ( ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋งŒ ๋ฆฌํ„ดํ•ด์•ผ ํ•จ )

 

3๏ธโƒฃ Fragment

  div ํƒœ๊ทธ ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

4๏ธโƒฃ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜

  ํ•จ์ˆ˜์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ณ€์ˆ˜๋Š” ์ค‘๊ด„ํ˜ธ {์›ํ•˜๋Š” ๋ณ€์ˆ˜๋ช…}์œผ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

  Appํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜์ธ name๊ณผ age๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด {name}, {age}๋กœ ํ•˜๋ฉด ๋œ๋‹ค

 

 

5๏ธโƒฃ 3ํ•ญ ์—ฐ์‚ฐ์‹

  If๋ฌธ ๋Œ€์‹ ์— 3ํ•ญ ์—ฐ์‚ฐ์ž ์ด์šฉํ•œ๋‹ค

 

 

6๏ธโƒฃ null

  ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ ๊ฒŒ ์—†์„ ๊ฒฝ์šฐ null์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค

 

7๏ธโƒฃ undefined

โš ๏ธ undefined์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒํ™ฉ์„ ๋งŒ๋“ค๋ฉด ์•ˆ ๋œ๋‹ค!

 

 

8๏ธโƒฃ DOM์š”์†Œ์— Style ๋„ฃ๊ธฐ

DOM ์š”์†Œ์— ์Šคํƒ€์ผ์„ ์ง์ ‘ ๋„ฃ์„ ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒดํ˜• ๊ฐ์ฒด๋กœ ๋ฌถ๊ณ  ์†์„ฑ์€ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค

 

 

9๏ธโƒฃ className

 ํƒœ๊ทธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ class๋ฅผ ์ด์šฉํ–ˆ์—ˆ๋Š”๋ฐ JSX์—์„œ๋Š” className ์‚ฌ์šฉํ•œ๋‹ค

 

 

๐Ÿ”Ÿ ์™ธ๋กœ์šด ํƒœ๊ทธ

ํ™€๋กœ ์‚ฌ์šฉํ•˜๋Š” ํƒœ๊ทธ๋Š” ๋‹ซ๋Š” ํƒœ๊ทธ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค  ๐Ÿ‘‰  < app/ >