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>
'๐ผFront > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ์กํธ์ Virtual DOM (0) | 2021.04.16 |
---|---|
React #5 create-react-app (0) | 2021.04.05 |
React #4 ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ปดํฌ๋ํธ์ ์ดํด (0) | 2021.04.05 |
React #3 props & state (0) | 2021.04.05 |
React #1 ๊ฐ๋ (0) | 2021.03.29 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev