/react

Primary LanguageJavaScript

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป React ์ •๋ฆฌ

  • virtural DOM

    • DOM(Document Object Model)

      • ๊ฐ์ฒด๋กœ ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ XML์ด๋‚˜ HTML๋กœ ์ž‘์„ฑ

      • ์›น๋ธŒ๋ผ์šฐ์ €๋Š” DOM์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSS๋ฅผ ์ ์šฉ.

      • DOM์€ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ผ ํŠน์ • node๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ˆ˜์ •, ์ œ๊ฑฐ, ์›ํ•˜๋Š” ์œ„์น˜์— ์‚ฝ์ž… ๊ฐ€๋Šฅ.

      • ๋™์  UI์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์ง€ ์•Š์Œ.

      • DOM ์ž์ฒด๋Š” ๋น ๋ฅด์ง€๋งŒ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ DOM์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์›น ๋ธŒ๋Ÿฌ์šฐ์ €๊ฐ€ CSS๋ฅผ ๋‹ค์‹œ ์—ฐ์‚ฐํ•˜๊ณ , ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋ฆฌํŽ˜์ธํŠธํ•˜๋ฉด์„œ ์‹œ๊ฐ„์ด ํ—ˆ๋น„๊ฐ€ ๋จ.

        => ๊ทธ๋Ÿฌ๋ฏ€๋กœ react์—์„œ๋Š” virtual DOM ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ DOM ์—…๋ฐ์ดํŠธ๋ฅผ ์ถ”์ƒํ™”ํ•จ์œผ๋กœ์จ DOM ์ฒ˜๋ฆฌ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰.


    • Virtual DOM

      • ์‹ค์ œ DOM์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ
      • DOM ์—…๋ฐ์ดํŠธ ์ ˆ์ฐจ
        1. ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ „์ฒด UI๋ฅผ Virtual DOM์— ๋ฆฌ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
        2. ์ด์ „ Virtual DOM์— ์žˆ๋˜ ๋‚ด์šฉ๊ณผ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
        3. ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.



  • ์ฝ”๋“œ ์ดํ•ด

    import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ด

    import React, { Component } from 'react';
    import fs from 'fs';
    import logo from './logo.svg'; // file-loader๋ฅผ ํ†ตํ•ด ๋ฏธ๋””์–ด ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    import './App.css'; // css-loader๋ฅผ ํ†ตํ•ด CSS ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    
    // ์ด์ „ ๋ฌธ๋ฒ•
    var React = require('react');
    var Component = React.Component;
    

    Class ๋ฌธ๋ฒ•

    class App extends Component{
    ...
    }
    

    Render(): ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ ์ €์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ return

    ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋‚˜ ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ์ฝ”๋“œ = JSX

    render(){
      return (
      	<div className="App">
        </div>
      )
    }
    



  • JSX

    • JSX ๋ฌธ๋ฒ•

      ์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ถ€๋ชจ ์š”์†Œ ํ•˜๋‚˜๋กœ ๊ผญ ๊ฐ์‹ธ์•ผํ•œ๋‹ค.

      // ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์ฝ”๋“œ
      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          return(
          	<h1> ๋ฆฌ์•กํŠธ </h1>
            <h2> Awesome </h2>
          )
        }
      }
      
      export default App;
      
      // ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š” ์ฝ”๋“œ (div๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์คŒ)
      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          return(
            <div>
            	<h1> ๋ฆฌ์•กํŠธ </h1>
            	<h2> Awesome </h2>
            </div>
          )
        }
      }
      
      export default App;
      

      Fragment: div์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          return(
            <Fragment>
            	<h1> ๋ฆฌ์•กํŠธ </h1>
            	<h2> Awesome </h2>
            </Fragment>
          )
        }
      }
      
      export default App;
      

      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„: JSX ๋‚ด๋ถ€์—์„œ ์ฝ”๋“œ๋ฅผ { }๋กœ ๊ฐ์‹ธ๊ธฐ.

      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          const text = "Awesome"
          return(
            <div>
            	<h1> ๋ฆฌ์•กํŠธ </h1>
            	<h2> {text} </h2>
            </div>
          )
        }
      }
      
      export default App;
      

      ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž

      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          const text = "Awesome"
          return(
            <div>
            	<h1> ๋ฆฌ์•กํŠธ </h1>
            	<h2> {text} </h2>
            	{
            		condition ? '์ฐธ' : '๊ฑฐ์ง“'
            	}
            </div>
          )
        }
      }
      
      export default App;
      

      ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ง

      import React, { Component } from 'react';
      
      class App extends Component{
        render(){
          const text = "Awesome"
          const condition = true;
          const style = {
          	backgroundColor: 'gray',
          	border: '1px solid black',
          	height: Math.round(Math.random() * 300) + 50,
          	width: Math.round(Math.random() * 300) + 50,
          	WebkitTransition: 'all',
          	MozTransition: 'all',
          	msTransition: 'all'
          };
          
          return(
            <div>
            	<h1> ๋ฆฌ์•กํŠธ </h1>
            	<h2> {text} </h2>
            	{condition && '๋ณด์—ฌ์ฃผ์„ธ์š”'}
            	<div style={style}></div>
            </div>
          )
        }
      }
      
      export default App;
      

      ๊ผญ ๋‹ซ์•„์•ผ ํ•˜๋Š” ํƒœ๊ทธ (input / br ๋“ฑ)

      <form>
      	First name: <br/>
        <input type="text" name="firstname" /><br/>
        Last name: <br/>
        <input type="text" name="lastname" /><br/>
      </form>