JiwonDev

React #2 ๋ฆฌ์•กํŠธ.JS

by JiwonDev

React.js ๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ๋งŒ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ํŠน์ง•์œผ๋กœ JSX (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— HTML์„ ๋ฐ”๋กœ ์“ฐ๋Š” ํ™•์žฅ๋ฌธ๋ฒ•)๊ณผ ๊ฐ€์ƒ DOM์˜ ์‚ฌ์šฉ์ž…๋‹ˆ๋‹ค.

 

๊ฐ€์ƒ DOM์ด๋ž€?

 

#1. React๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์ด๋‹ค.

๋ณดํ†ต ํด๋ผ์ด์–ธํŠธ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ Controller, Model, View model, Template...๋“ฑ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ์˜ ๋ชจ๋“  ๊ฒƒ์€ Component ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋ฆฌ์•กํŠธ๋Š” View๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ / ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๋‘˜ ๋‹ค ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.


#2 import react , reactDOM

๊ธฐ์กด์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•œ ๊ฐœ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋˜์—ˆ์œผ๋‚˜

์ตœ์‹ ๋ฒ„์ „์˜ ๋ฆฌ์•กํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(react) ์™€ ๋ Œ๋”๋ง(reactDOM) ๋ถ€๋ถ„์ด ๋‚˜๋ˆ„์–ด์ ธ ๊ฐ๊ฐ import ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์•„๋‹Œ ๋ชจ๋ฐ”์ผ ์•ฑ์— ๋ฆฌ์•กํŠธ๋ฅผ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, reactDOM ๋Œ€์‹  reactNative๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


#3. JSX ํ™•์žฅ๋ฌธ๋ฒ•

๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” JSX๋ฅผ ์ด์šฉํ•˜์—ฌ HTML์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฑด ์•„๋‹ˆ๊ณ , JSX๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” Babel์„ ํ†ตํ•ด ๊ธฐ์กด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

var a =(
    <div>
        ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค <b> React์— ์˜ค์‹ ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. </b>
    </div>
);

์ด ์ฝ”๋“œ๋Š” Babel์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

"use strict":

var a = React.createElement(
    "div",
    null,
    "๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค",
    React.createElement(
        "b",
        null,
        "React์— ์˜ค์‹ ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค."
    )
);

#3-1 Hello React!

์‹คํ–‰๊ฒฐ๊ณผ : ์•ˆ๋…•ํ•˜์„ธ์š”

<div id="root"> </div>
// 1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
import React from 'react'; // ๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
import ReactDOM from 'react-dom'; // ๋ฆฌ์•กํŠธ Rendering ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

// 2. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
/*
	์ด๋ ‡๊ฒŒ ํ•œ ํŒŒ์ผ์•ˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค ์ ์–ด๋„ ๋˜์ง€๋งŒ
    ๋ณดํ†ต์€ ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ํŒŒ์ผ์„ ๋‚˜๋ˆˆ ํ›„, ๊ฐ ํŒŒ์ผ์— exportํ•˜์—ฌ
    index.js ์—์„œ import๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
*/
class Hello extends React.Component{
    render() {
        return (
            <div>
                ์•ˆ๋…•ํ•˜์„ธ์š”
            </div>
        );
    }
}

// 3. ํ•œ๋ฒˆ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ ๊ฐ์ฒด๋Š” JSX ๋ฌธ๋ฒ• <Class/> ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
class App extends React.Component{
    render() {
        return(
            <Hello/>
        );
    }
}

// 4. ๋‚ด๊ฐ€ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์›ํ•˜๋Š” ์š”์†Œ์— ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. (์ด๋Š” ๊ฐ€์ƒ DOM์ž…๋‹ˆ๋‹ค.)
ReactDOM.render(<App/>.document.getElementById('root'));

#3-2 ๊ธฐ๋ณธ ๊ฐœ๋…

1. Nested Element

ํ•˜๋‚˜์˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

// ์—๋Ÿฌ! ์ปดํฌ๋„ŒํŠธ์— 2๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋“ค์–ด๊ฐ.
class Hello extends React.Component{
    render() {
        return (
            <h1>ํ•œ๊ฐœ ๋“ฑ๋ก</h1>
            <h1>๋‘๊ฐœ ๋“ฑ๋ก</h1>
        );
    }
}
// ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
class Hello extends React.Component{
    render() {
        return (
            <div>
                <h1>ํ•œ๊ฐœ ๋“ฑ๋ก</h1>
                <h1>๋‘๊ฐœ ๋“ฑ๋ก</h1>
            </div>
        );
    }
}

 

์ฐธ๊ณ ๋กœ ์ฃผ์„ ๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์ž‘์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

class Hello extends React.Component{
    render() {
        return(
            <div> 
                {/* ์ฃผ์„๋„ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค */}
                <h1> ์•ˆ๋…•ํ•˜์„ธ์š” </h1>
                {/* ์ฃผ์„๋„ JS ๊ธฐ๋Šฅ์ด๋‹ˆ๊นŒ {~} ์•ˆ์— ์ ์–ด์ฃผ์„ธ์š”. */}
            </div>
        )
    }
}

2. JavaScript ์‚ฌ์šฉํ•˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด render() ํ•จ์ˆ˜ ์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , return ์•ˆ์—์„œ ๋ธŒ๋ผ์ผ“ { } ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

class Hello extends React.Component{
    render() {
        let text = "Hello React"
        return (
            <div> ์ด๊ฑด {text} ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค. </div>
        );
    }
}

๋‹ค๋งŒ if, else๋ฌธ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ผญ ์‚ฌ์šฉ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ผํ•ญ์—ฐ์‚ฐ์ž( conditon ? true : false )๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

<div> { 3 > 1 ? 'True' : 'False'} </div>

3. Inline Style ์ง€์ •ํ•˜๊ธฐ

key:value ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , html style ์š”์†Œ์— ์†์„ฑ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ JSX์—์„œ ์Šคํƒ€์ผ์„ ์„ค์ •ํ•  ๋•Œ key๋Š” string ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  key๊ฐ€ camelCase์ธ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

class Hello extends React.Component{
    render() {
        let myStyle = {
            color:'red',
            backgroundColor:'black'
        };
        
        return(
            <div style={myStyle}> ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ํ…์ŠคํŠธ </div>    
        )
    }
}

 

์ฐธ๊ณ ๋กœ  JSX์—์„œ class๋ฅผ ์„ค์ • ํ•  ๋•Œ๋Š”, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํ‚ค์›Œ๋“œ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด className ="" ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<div className="box"> 
	์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‚ค์›Œ๋“œ์™€ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ์œ„ํ•ด์„œ class -> className
</div>

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ