๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/React

[React] 1. JSX

by KASSID 2023. 5. 7.

๋ชฉ์ฐจ

    728x90

    2023.05.05 - [๐ŸŒŒ | WEB DEV/React] - [React] 0. React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  & ์ดˆ๊ธฐ ์„ธํŒ…

     

    ๋ณธ๊ฒฉ์ ์œผ๋กœ React๋ฅผ ์ด์šฉํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!

     

    1. JSX

    ์›น์‚ฌ์ดํŠธ์˜ ๋ผˆ๋Œ€๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ html๊ณผ css๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•œ๋‹ค.

    React๋ผ๊ณ  ํ•ด์„œ ๋‹ค๋ฅผ ๊ฒƒ์€ ์—†๋‹ค! ๋˜‘๊ฐ™์ด html๊ณผ css๋ฅผ ์ด์šฉํ•œ๋‹ค.

     

    ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์€ ์ €๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ค˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ jsํŒŒ์ผ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

    ์ด๊ฒƒ์ด ๋ฐ”๋กœ JSX์ด๋‹ค.

     

    JSX(JavaScript XML)๋Š” JS์— XML์„ ์ถ”๊ฐ€ํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.

    JSX์— XML ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ๋ฐ”๋ฒจ์„ ํ†ตํ•ด ์ผ๋ฐ˜ jsํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

     

     

    App.js

    import './App.css';
    
    function App() {
      return (
        <div className="App">
        
          ...
    
        </div>
      );
    }
    
    export default App;

    ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ div ํƒœ๊ทธ ๋งŒ์„ ๋‚จ๊ฒจ๋†“๊ณ  ์‹œ์ž‘ํ•ด๋ณด์ž!

    ์ด๋Š” App()์—์„œ returnํ•˜๋Š” ํƒœ๊ทธ๋Š” 1๊ฐœ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    App.js๊ฐ€ index.js์˜ render() ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ

    ์ด๋•Œ ํ•œ ๊ฐœ์˜ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    css ํŒŒ์ผ ์ ์šฉ์€ ์œ„ ์ฝ”๋“œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ App.css๋ฅผ importํ•˜์—ฌ ํ™œ์šฉํ•œ๋‹ค.

     

    ์ด์ œ ์•Œ์•„๋‘์–ด์•ผ ํ•  JSX์˜ ๋ฌธ๋ฒ• ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž.

    JSX ๋ฌธ๋ฒ• ํŠน์ง•_1 ) Html ํƒœ๊ทธ์— class๋ฅผ ๋ถ€์—ฌํ•  ๋•Œ์—๋Š” className=' '

    ๊ธฐ์กด html๊ณผ์˜ ์ฐจ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” class ์„ ํƒ์ž๋ฅผ ๋ถ€์—ฌํ•  ๋•Œ className์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด๋Š” JSX๊ฐ€ ๊ฒฐ๊ตญ JS์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์—์„œ ํด๋ž˜์Šค์™€ ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

     

    JSX ๋ฌธ๋ฒ• ํŠน์ง•_2 ) ๋ณ€์ˆ˜๋ฅผ Html์— ํ™œ์šฉํ•  ๋•Œ์—๋Š” ์ค‘๊ด„ํ˜ธ{  } 

    js์˜ ๋ณ€์ˆ˜์— ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์„ Html์— ์ ์šฉํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋•Œ์—๋Š” ์ค‘๊ด„ํ˜ธ์— ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์‹ถ์€ ๋ณ€์ˆ˜๋ช…์„ ๋‹ด์œผ๋ฉด ๋œ๋‹ค.

    { ๋ณ€์ˆ˜๋ช… }์˜ ํ˜•ํƒœ์ด๋‹ค!

     

     

    App.js

    import logo from './cat-face.svg';
    import './App.css';
    
    const author = "KASSID";
    
    function App() {
      return (
        <div className="App">
    
          <div className="nav-container">
            <div className="nav">
              <div className="logo-container">
                <img className="logo" src={logo} alt="logo" />
              </div>
              <h1>{author} MUSIC</h1>
              <div className="title-container"></div>
            </div>
          </div>
    
        </div>
      );
    }
    
    export default App;

    ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ logo์— ๋‹ด๊ณ , ์ž‘์„ฑ์ž ๋ช…์„ author์— ๋‹ด์•˜๋‹ค. ๊ทธ๊ฒƒ์„ ํ™œ์šฉํ•œ ์˜ˆ์‹œ์ด๋‹ค.

     

     

    JSX ๋ฌธ๋ฒ• ํŠน์ง•_3 ) ํƒœ๊ทธ ๋‚ด style ์ง์ ‘ ์ถ”๊ฐ€ style = { { ์Šคํƒ€์ผ object } }

    ๊ธฐ์กด์˜ style="์†์„ฑ๋ช…: ๊ฐ’" ์˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ

    style={ {์†์„ฑ๋ช…: '๊ฐ’'} }์˜ ํ˜•ํƒœ์ด๋‹ค.

     

    ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์†์„ฑ๋ช…์€ CamelCase๋กœ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ์ฆ‰, font-size, font-weight์™€ ๊ฐ™์€ ์†์„ฑ ๋“ค์€ fontSize, fontWeight ๋“ฑ์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ ๊ธฐ์ž…ํ•ด์•ผํ•œ๋‹ค.

     

    <div style={ {fonstSize: '1rem', color: '#333')} }>

     

     

    ๋Œ“๊ธ€