• React

[REACT] React

man_on 2021. 8. 29. 16:57
๋ฐ˜์‘ํ˜•

 

 

 


     

    React

     

    ๐Ÿ”ป ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

     

     

    โœ”๏ธ ์‚ฌ์šฉ์ด์œ ?

      UI๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์คŒ ( ๊ฐ€์ƒ ๋” virtual Dom์„ ํ†ตํ•ด UI๋ฅผ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ)

       virtual Dom : ์ด์ „ UI์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•ด์„œ, ๋ณ€๊ฒฝ๋  UI์˜ ์ตœ์†Œ ์ง‘ํ•ฉ์„ ๊ณ„์‚ฐ ( ๋ถˆํ•„์š”ํ•œ UI์—…๋ฐ์ดํŠธ ์คŒ, ์„ฑ๋Šฅํ–ฅ์ƒ)

     

    โœ”๏ธ ์ž‘์—…ํ™˜๊ฒฝ

      Node. js :  js๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ํ™˜๊ฒฝ

      npm  :  ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ 

      React Native : ์›น> ์•ฑ / ์•ˆ๋“œ๋กœ์ด๋“œ & ios๋™์‹œ์— ๊ฐ€๋Šฅ

     

     

     


     

     

     

     

    React VS React.DOM

     

     

     react : component๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ

     react.DOM : component๋ฅผ ๊ฐ€์ ธ์™€ DOM์— renderingํ•˜๋Š” library (์‹ค์ œ DOM๊ณผ ์ƒํ˜ธ์ž‘์šฉ)

     

     

    ๐Ÿ”ป react์—์„œ render๋˜๋Š” ๊ณผ์ •

    index.html์˜ <div class=container>์— ์ˆ˜๋งŽ์€ component๋“ค์ด render๋˜๋Š” ๊ฒƒ.

    (์ตœ์ƒ์œ„ ๋ฃจํŠธ์ธ container์š”์†Œ์•ˆ์˜ ์ž์‹์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.)

    //src - index.js
    import React from "react";
    import ReactDOM from "react-DOM";
    
    const App = () => {
      return <div> hi</div>;
    };
    
    ReactDOM.render(<App />, document.querySelector(".container"));
    <!DOCTYPE html>
    <html>
      <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="/style/style.css">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAq06l5RUVfib62IYRQacLc-KAy0XIWAVs"></script>
      </head>
      <body>
        <div class="container"></div>
      </body>
      <script src="/bundle.js"></script>
    </html>

     

     

    โœ”๏ธ ์ž‘์—…ํ™˜๊ฒฝ

      Node. js :  js๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ํ™˜๊ฒฝ

      npm  :  ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ 

      React Native : ์›น> ์•ฑ / ์•ˆ๋“œ๋กœ์ด๋“œ & ios๋™์‹œ์— ๊ฐ€๋Šฅ

     

     

     

     


     

     

     

     

     

    CRA

     

     

    Create-React-App

    : ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๋„๊ตฌ

     

     

    โœ”๏ธ CRA ์„ค์น˜

    1. ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

        npx create-react-app ํ”„๋กœ์ ํŠธ๋ช…

    2.  react-app์— ์ ‘๊ทผ

       cd ํ”„๋กœ์ ํŠธ๋ช…

    3. ๊ฐœ๋ฐœ๋ชจ๋“œ ์‹คํ–‰

        npm start  ( https://localhost : 3000 ์ ‘์†๋œ ์ฐฝ )

    4. ๊ฐœ๋ฐœ๋ชจ๋“œ ์ข…๋ฃŒ

        ctrl + c

     

     

     

     


     

     

     

     

     

    CRA ๊ธฐ๋ณธ ํด๋” ๋ฐ ํŒŒ์ผ ๊ตฌ์„ฑ

     

     

    > node.modules

        CRA ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์กด์žฌ

        (github์— ์˜ฌ๋ฆด๋•Œ ๋ถˆํ•„์š”ํ•จ > .gitignoreํŒŒ์ผ์— ์ถ”๊ฐ€)

     

     

    > package.json

        CRA ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ์™ธ ์ถ”๊ฐ€๋กœ ์„ค์น˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/ํŒจํ‚ค์ง€ ์ •๋ณด(์ข…๋ฅ˜, ๋ฒ„์ „)๊ฐ€ ๊ธฐ๋ก

      ( ์‹ค์ œ ๋‚ด์ฝ”๋“œ์™€ ์„ค์น˜ ํŒจํ‚ค์ง€๋Š” ๋‚ด ๋กœ์ปฌ์—๋งŒ ์กด์žฌ > github์˜ฌ๋ฆด๋•Œ package.json๋„˜๊ธฐ๋ฉด ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด pull๋ฐ›์•„์„œ

        npm install๋งŒ ์ž…๋ ฅํ•˜๋ฉด package.jsonํ™•์ธํ•˜์—ฌ ์ž๋™์„ค์น˜)

     

         ์ฐธ๊ณ ) ์ƒˆ๋กœ์šด Library(package) ์„ค์น˜ ์‹œ

               > npm์œผ๋กœ ์„ค์น˜ (ex. npm install slider)

                ์„ค์น˜ ์‹œ node modules ์— ์ž๋™์„ค์น˜ ๋˜์ง€๋งŒ package.json - dependencies ์— ์ถ”๊ฐ€ ์ž๋™์œผ๋กœ ๋˜๋Š” ๊ฑด ์•„๋‹˜.

                 ๊ทธ๋ž˜์„œ, npm install slider —-save   ( —-save ๊นŒ์ง€ ์ž‘์„ฑํ•ด์•ผ dependencies ์— ์ถ”๊ฐ€)

        "scripts"

            run : ํ”„๋กœ์ ํŠธ๋ฅผ development mode(๊ฐœ๋ฐœ ๋ชจ๋“œ) ์‹คํ–‰์„ ์œ„ํ•œ ๋ช…๋ น์–ด. npm run start.

             build : ํ”„๋กœ์ ํŠธ production mode(๋ฐฐํฌ ๋ชจ๋“œ) ์‹คํ–‰์„ ์œ„ํ•œ ๋ช…๋ น์–ด. ์„œ๋น„์Šค ์ƒ์šฉํ™”.

     

     

    > gitignore

          .gitignore ํŒŒ์ผ์— github ์— ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์€ ํด๋”์™€ ํŒŒ์ผ์„ ์ž‘์„ฑ

     

     


     

    > public ํด๋”

           index.html  /   images - ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ด€๋ฆฌ   /   data - mock data ๊ด€๋ฆฌ 

     

    > public - index.html

          <div id="root"></div>

         CRA์—๋Š” htmlํŒŒ์ผ์ด index ํ•œ๊ฐœ. (๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  ์•ฑ์€ single page application ์ด๊ธฐ ๋•Œ๋ฌธ)

     

     


     

    >  src ํด๋”

        components - ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ

        pages - ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ์ปดํฌ๋„ŒํŠธ ํด๋”๋กœ ๊ตฌ์„ฑ   (  Login - Login.js, Login.scss  ) (  Main- Main.js, Main.scss  )

        styles ํด๋”   ( reset.scss - css ์ดˆ๊ธฐํ™”  )  ( commom.scss - ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” css ์†์„ฑ ์ •์˜  ) 

        index.js / App.js ์ œ์™ธ ์‚ญ์ œ

     

     

    >  src - index.js (๊ณ ์ •)

           React์˜ ์‹œ์ž‘ (Entry Point)

           ReactDOM.render( <App /> , document.getElementById('root'))

                 ( ReactDOM.render ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ๋‘ ๊ฐœ

                    ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ ์ปดํฌ๋„ŒํŠธ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜)

     

    > src - App.js

           ํ˜„์žฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ์ดˆ๊ธฐ ์ปดํฌ๋„ŒํŠธ

     

             ์ฐธ๊ณ ) components vs. pages

         ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๋™์‹œ์— ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ components ํด๋”์—์„œ ๊ด€๋ฆฌ  (ex. Header, Nav, Footer)

         ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ pages ํด๋”์—์„œ ๊ด€๋ฆฌ.

         ํ•ด๋‹น ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ํด๋” ํ•˜์œ„์—์„œ ๊ด€๋ฆฌ.

     

     

     

     

     

     

     

    ๋ฐ˜์‘ํ˜•

    'โ€ข React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [React] Router  (0) 2021.10.24
    [React] React hook basic  (0) 2021.10.21
    [REACT] State / Event  (0) 2021.09.04
    [REACT] Component / Props / Mock data  (0) 2021.09.01
    [REACT] JSX / Component  (0) 2021.08.30