React #2 ๋ฆฌ์กํธ.JS
by JiwonDevReact.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