React #1 ๊ฐ๋
by JiwonDevHTML, CSS, JS
2021.03.22 - [Web/HTML&CSS] - HTML, CSS ๊ธฐ์ด
ECMA Script
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค. Java ์ด๋ฆ์ ์ ์๊ถ ๋ฌธ์ + ๋ฌธ๋ฒ ํ์ค์ด๋ผ๋ ์๋ฏธ๋ก ECMA(European Computer Manafactures Assocation)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. 2015๋ ES6 ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ์ ๋ฏผ๋งํ ์ ๋๋ก ๊ฐํ์ด์๊ณ ES6 (ES2015) ์ดํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค์ด ํ๋ฆฝ๋๋ฉฐ ์ฌ๋ฌ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ธฐ ์์ํ์ต๋๋ค.
Node.js
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๊ณณ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ๋๋ก ํด์ฃผ๋ ๋ฐํ์ ํ๊ฒฝ.
์ ๋ช ํ ํจํค์ง ๋ค์ด๋ก๋ ๋งค๋์ (npm)์ ๊ธฐ๋ณธ ์ ๊ณตํด์ฃผ๋ฉฐ ํฌ๋กฌ์ V8 ์น ๋ธ๋ผ์ฐ์ ์์ง์ ์ฌ์ฉํฉ๋๋ค.
Npm, Yarn
์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๋งค๋์ ํ๋ก๊ทธ๋จ์ ๋๋ค. ๊ฐ์ข ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ , ์ข ์์ฑ์ ๊ด๋ฆฌํด์ฃผ๋ฉฐ ๋ณต์กํ๊ฒ ์ฎ์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฝ์ ๋ช ๋ น์ด ํ๋ฒ์ผ๋ก ์ฝ๊ฒ ๋ค์ด๋ก๋, ๊ด๋ฆฌ ํ ์ ์๊ฒ ๋์์ค๋๋ค. Node.js ์์ ์ ๊ณตํด์ฃผ๋๊ฒ npm(node package manager)์ด๊ณ , ํ์ด์ค๋ถ์์ npm์ ๋ณด์์ฑ์ด๋ ์๋๋ฅผ ๊ฐ์ ํ๋ ค๊ณ ๋ง๋ ๊ฒ yarn ํจํค์ง ๋งค๋์ ์ ๋๋ค. ๋ ์ค ๋ญ๊ฐ ์ข๋ค๊ธฐ๋ณด๋ค๋, ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
ํ์ด์ค๋ถ ๊ณต์ํ์ด์ง Yarn ์๊ฐ๊ธ(2016)
์ฐธ๊ณ ๋ก ์๋์ ์๋ Babel, React๋ ์ด๋ฌํ ํจํค์ง ๋งค๋์ ๋ฅผ ์ด์ฉํ์ฌ ์์ฝ๊ฒ ์ต์ ๋ฒ์ ์ ๋ค์ด ๋ฐ์ ์ ์์ต๋๋ค.
Babel
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋๋ผ๋ ๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋ง๋ ๋ฒ์ ์ผ๋ก ๋ณํํด์ฃผ๋ ํฌ๋ก์ค ์ปดํ์ผ๋ฌ
๋ฆฌ์กํธ์ ์ฌ์ฉ์๊ฐ ๋์ด๋ ์ด์ ๋ ๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ JSX ๋ฌธ๋ฒ๋ ํ์ค์ผ๋ก ์ง์ํฉ๋๋ค.
ํ๋ก์ ํธ ์ข ์์ฑ ๊ด๋ฆฌ
์๋ก์ ์ค์ฝํ(๋ณ์์ด๋ฆ, ๋ฉ๋ชจ๋ฆฌ) ์นจ๋ฒ, ์ฌ๋ฌ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ผ๋ค์ ๋ฒ์ ํธํ๊ณผ import ์ค๋ณตํธ์ถ, ๋๋ฝ๋ฑ์ ๋ฐฉ์งํ๋ ๊ฑธ ์ข ์์ฑ ๊ด๋ฆฌ๋ผ๊ณ ํฉ๋๋ค. ES6 ์ดํ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค์ด ๋ง๋ค์ด์ง๊ณ ํ ์นํ์ด์ง์ ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ SPA(Single Page App) ๊ฐ๋ฐ ๋ฐฉ์์ด ํฅํ๊ฒ ๋๋ฉด์ ํ๋ก์ ํธ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ก์ต๋๋ค.
Webpack
์์ ์ข ์์ฑ์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ์ํด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
2021๋ ๊ธฐ์ค ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์ข ์์ฑ ๊ด๋ฆฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ฌ (Static Module Bundler)๋ก ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ ๋ถ ์ฝ์ด์ ๊ด๋ฆฌํ๊ธฐ ํธํ ํํ๋ก ๋ณํ์์ผ์ค๋๋ค. ๋ค์ํ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ webpack์ ์ด์ฉํ์ฌ ๋ฆฌ์กํธ์์ ์ฌ์ฉํ JSX๋ฌธ๋ฒ์ ๊ฐ๋จํ๊ฒ babel์ผ ์ฐ๊ฒฐ์์ผ ์๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ ์ํฌ ์ ์์ต๋๋ค.
2021.04.16 - [Web/React] - Webpack
์ฐธ๊ณ ๋ก Webpack์ด ๋์ค๊ธฐ ์ ์๋ (~2014) Gulp๋ Grunt ๊ฐ์ ๋ฆฌ์์ค ๊ด๋ฆฌ ํด๋ง ์ฌ์ฉํ์ต๋๋ค.
React
ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ ์ปดํฌ๋ํธ๊ธฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ View ๋ผ์ด๋ธ๋ฌ๋ฆฌ
HTML๊ณผ JS๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ JSX๋ฌธ๋ฒ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. (Babel์ ํตํด ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ JS๋ก ๋ณํ๋จ) ๋ชจ๋ ๊ฒ์ ์ปดํฌ๋ํธ( ๊ฐ์ฒด )๋ก ์ทจ๊ธ๋๋ฉฐ ๊ฐ์DOM์ ์ฌ์ฉํฉ๋๋ค.
React์ ํจ๊ป ๋ง์ด ์ฌ์ฉํ๋ ํ๋ ์์ํฌ๋ก๋ express(HTML, Connect Component ๋๊ตฌ) , NextJS(React SSR ๋๊ตฌ) ๋ฑ์ด์์ต๋๋ค. 2021๋ ๊ธฐ์ค ์น์์ ๊ฐ์ฅ ํซํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ ๋๋ค.
* [๋๋ณด๊ธฐ] Chrome ๊ฐ๋ฐ์๋๊ตฌ
React-dectector (๋ฆฌ์กํธ ์ฌ์ฉ์ฌ๋ถ)
chrome.google.com/webstore/detail/react-detector/jaaklebbenondhkanegppccanebkdjlh?hl=en-US
Show-me-te-react(๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ์์น ํด์ ํ์)
chrome.google.com/webstore/detail/show-me-the-react/iaebolhfcmodobkanmaahdhnlplncbnd?hl=en-US
React-Developer Tools(ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ์ React ํญ ์ถ๊ฐ)
chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en-US
React-dectector (๋ฆฌ์กํธ ์ฌ์ฉ์ฌ๋ถ)
chrome.google.com/webstore/detail/react-detector/jaaklebbenondhkanegppccanebkdjlh?hl=en-US
Show-me-te-react(๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ์์น ํด์ ํ์)
chrome.google.com/webstore/detail/show-me-the-react/iaebolhfcmodobkanmaahdhnlplncbnd?hl=en-US
React-Developer Tools(ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ์ React ํญ ์ถ๊ฐ)
chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en-US
Virtual DOM ( ๊ฐ์ DOM )
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ DOM์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค ํ๋์ ๋๋ค.
๋ฆฌ์กํธ๋ View๋ง ๋ค๋ฃจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ SPA(Single Page App)์ ์ฌ์ฉํ๊ธฐ ์ข์ต๋๋ค.
2021.03.29 - [Web/React] - ๋ฆฌ์กํธ์ Virutal DOM
JSX ๋ฌธ๋ฒ
import React from 'react';
const MyComponents = {
DatePicker: function DatePicker(props) {
return (
<div>
Imagine a {props.color} datepicker here.
</div>
);
}
}
function BlueDatePicker() {
return <MyComponents.DatePicker color="blue" />;
}
๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ (JavaScript eXtension ๋๋ JS XML)์ ๋๋ค.
HTML์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ด์์ ์ฌ์ฉ ํ ์ ์๊ณ ์ฝ๋๋ฅผ ์ง๊ด์ ์ผ๋ก ์ฐ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด์ค๋๋ค. ๋ค๋ง, ๊ฒฐ๊ตญ์๋ JSX๋ฌธ๋ฒ๋ Babel์ ์ด์ฉํ์ฌ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋๋ฏ๋ก, JSX ์ฝ๋๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋์ฒด ๊ฐ๋ฅํฉ๋๋ค.
import react
// JSX ๋ฌธ๋ฒ
var a =(
<div>
๋ฐ๊ฐ์ต๋๋ค <b> React์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. </b>
</div>
);
ํด๋น ์ฝ๋๋ Babel์ ์ํด ์๋์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋ฉ๋๋ค.
// ๋ฐ๋๋ผ JS
"use strict":
import react
var a = React.createElement(
"div",
null,
"๋ฐ๊ฐ์ต๋๋ค",
React.createElement(
"b",
null,
"React์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค."
)
);
์์ ๋ฆฌ์กํธ
React๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ถ๋ถ JSX๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
JSX๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๊ตฌ์ฑ๋์ด์๋์ง ๊ฐ๋จํ๊ฒ ํ๋ฒ ์ดํด ๋ด ์๋ค.
#1 import react
import React from 'react';
import ReactDOM from 'react-dom';
๊ธฐ์กด์ react๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๊ฐ๋ง ๋ถ๋ฌ์ค๋ฉด ๋์์ผ๋, ๋ฒ์ 0.14 ์ดํ๋ก React ์ฝ๋ ๋ถ๋ถ๊ณผ React-Virutal-DOM ๋ถ๋ถ์ด ๋ถ๋ฆฌ๋๊ฒ ๋์์ต๋๋ค. ์ด๋ ๋์ค์ ๊ฐ์ ๋ฆฌ์กํธ ์ฝ๋๋ก ๋ค๋ฅธ ํ๋ซํผ๊น์ง ํ์ฅํด์ ์ฌ์ฉํ๊ธฐ ์ํจ์ ๋๋ค. (React-Dom์ ์น๊ฐ๋ฐ์ฉ, React-Native์ ์ฑ๊ฐ๋ฐ์ฉ)
- ์ฐธ๊ณ ๋ก JSX ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ cssํ์ผ์ด๋ ์ธ๋ถ ์ด๋ฏธ์ง๋ก import๋ก ๋ถ๋ฌ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
import logo from './logo.svg';
import './App.css';
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๊ฐ์ฒด์ ๊ฒฝ์ฐ <Class/> ๋ก ๋ถ๋ฌ์์ ๋ค๋ฅธ ์ฝ๋์ ์ฌ์ฉ ํ ์๋ ์์ต๋๋ค.
class Hello extends React.Component{
render() {
return (
<div>
์๋
ํ์ธ์
</div>
);
}
}
// ์ปดํฌ๋ํธ ๊ฐ์ฒด๋ JSX ๋ฌธ๋ฒ <Class/> ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
// ๋ฌผ๋ก HTML ํ๊ทธ์ฒ๋ผ <Class type="Hello> </Class> ์ด๋ฐ ํํ๋ก ์์ฑ ์
๋ ฅ๋ ๊ฐ๋ฅํฉ๋๋ค.
class App extends React.Component{
render() {
return(
<Hello/> // == class Hello {...}
);
}
}
#2. HTML element ์์ฑ
// React.createElement("tag", {์์ฑ๊ฐ, key:value }, "๋ด์ฉ")
React.createElement("h1", null, "์๋
ํ์ธ์")
React.createElement("div", {id: "myID", 'data-type':"title" }, "์ ๋ชฉ์ ๋ค์ด๊ฐ ๋ด์ฉ์
๋๋ค");
์์ ๋ฆฌ์กํธ ์ฝ๋๋ ๋ค์ HTML ์ฝ๋์ ๊ฐ์ DOM์ ์์ฑํฉ๋๋ค.
<h1> ์๋
ํ์ธ์ </h1>
<!-- ํด๋น element๊ฐ ์ต์๋จ์ธ ๊ฒฝ์ฐ data-reactroot ํด๋์ค๊ฐ ์๋ ์ถ๊ฐ๋ฉ๋๋ค. -->
<div data-reactroot id="myID" data-type="title">
์ ๋ชฉ์ ๋ค์ด๊ฐ ๋ด์ฉ์
๋๋ค.
</div>
# 3. ์์, ํ๊ทธ ๊ฐ์ธ๊ธฐ
<ul class="myClass">
<li> ๋ชฉ๋ก 1</li>
์๋
ํ์ธ์
<li> ๋ชฉ๋ก 2</li>
<li myType = "๋ฉ๋กฑ" > ๋ชฉ๋ก 3</li>
<li> ๋ชฉ๋ก 4</li>
</ul>
- ์ด๋ ๊ฒ ํ๊ทธ๋ฅผ ๊ฐ์ธ๊ณ ์ถ๋ค๋ฉด, ์๋ ์ฝ๋ ์ฒ๋ผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
React.createElement( ... ) ์ 3๋ฒ์งธ ์ดํ ์ธ์๋ ์ ๋ถ ์์(children, ๋ด์ฉ)์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
React.createElement(
"ul", // ํ๊ทธ๋ช
null, // ์์ฑ๊ฐ, props
React.createElement("li",null, "๋ชฉ๋ก1"),
"์๋
ํ์ธ์",
React.createElement("li",null, "๋ชฉ๋ก2"),
React.createElement("li",{ myType:"๋ฉ๋กฑ" }, "๋ชฉ๋ก3"),
React.createElement("li",null, "๋ชฉ๋ก4"),
)
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ์์ฑ๋ ๋ฆฌ์กํธ ๊ฐ์ฒด(๋ถ๋ชจ)๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
<div> ์ฌ๊ธฐ์ ์ ์ ๋ด์ฉ </div> ์ ํด๋น ๋ฆฌ์กํธ ๊ฐ์ฒด์ props(์์ฑ๊ฐ) ์์ children ์์ฑ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
// ... React๋ก ๋ง๋ ๊ฐ์ฒด์ ์์ฑ๊ฐ
{
"type":"ul",
"props":{
"children":[
{ "type:" : "li", "props": {"children" : "๋ชฉ๋ก1"} },
"์๋
ํ์ธ์",
{ "type:" : "li", "props": {"children" : "๋ชฉ๋ก2"} },
{ "type:" : "li", "props": {"children" : "๋ชฉ๋ก3", "myType":"๋ฉ๋กฑ"} },
{ "type:" : "li", "props": {"children" : "๋ชฉ๋ก4"} },
]
}
}
# 4. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฉํ๊ธฐ
๋ฆฌ์กํธ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ HTML ์๋ฆฌ๋จผํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌ ํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์์์ ๋ ธ๊ฐ๋ค๋ก ๋ง๋ ์ฌ๋ฌ๊ฐ์ <ul> ๋ฆฌ์คํธ๋, ๋ค์๊ณผ ๊ฐ์ด ์์ฑ ๊ฐ๋ฅํฉ๋๋ค.
์ฐธ๊ณ ๋ก HTML "class" ์์ฑ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํด๋์ค ์์ฑ ํค์๋์ ๊ฒน์น๋ฏ๋ก ๋ฆฌ์กํธ์์๋ "className"์ผ๋ก ๋ฐ๊ฟ ์ฌ์ฉํฉ๋๋ค.
const items = [ // ๋ฐ์ดํฐ
'๋ชฉ๋ก1',
'๋ชฉ๋ก2',
'๋ชฉ๋ก3',
'๋ชฉ๋ก4',
]
React.createElement( // HTML - DOM ์์ฑ
"ul",
{"className": "myList"}, // class : "myList"
items.map( content => React.createElement("li", null, content))
)
<ul class="myList">
<li> ๋ชฉ๋ก 1</li>
<li> ๋ชฉ๋ก 2</li>
<li> ๋ชฉ๋ก 3</li>
<li> ๋ชฉ๋ก 4</li>
</ul>
# 5. ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ธฐ
' ๋ฆฌ์กํธ์ ๋ชจ๋ ๊ฒ์ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค '
์์์๋ ๋ฆฌ์กํธ๋ฅผ ์ด์ฉํ๋ฉฐ HTML ์์๋ฅผ ์์ฑ๋ง ํ์ ๋ฟ, ์ค์ ๋ฌธ์์ ๋ฐ์ํ์ง๋ ์์์ต๋๋ค.
๋ด๊ฐ ๋ง๋ ๋ฆฌ์กํธ ์์๋ฅผ ์ค์ DOM์ ๋ฐ์ํ๊ณ ์ถ๋ค๋ฉด ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ react-dom ์ ๋๊ฒจ์ฃผ์ด์ผ ํฉ๋๋ค.
import React from 'react'
import ReactDom from 'react-dom'
class ์ปดํฌ๋ํธ ์ด๋ฆ extends React.Component{
// ... ์๋ฐ์คํฌ๋ฆฝํธ class ๋ด์ฉ ... //
render(){
return React.createElement("h1", {myProps: "์์ฑ๊ฐ"}, " ๋ด์ฉ(Children) " );
}
}
// myComponent๋ฅผ 'root' ๋ผ๋ ID๋ฅผ ๊ฐ์ง ํ๊ทธ ์์ ๋ฐ์ํ๋ผ๋ ์๋ฏธ.
ReactDOM.render(์ปดํฌ๋ํธ, document.getElementById('root'));
import React from 'react'
import ReactDom from 'react-dom'
class myComponent extends React.Component{
renderItem(item,i){ // ์์๋ฅผ ์์ฑํ๋ myComponent ๋ฉ์๋
return React.createElement("li", {key:i}, item)
}
render(){ // Component ๋ด์ฅ ๋ฉ์๋. HTML์ ๋ ๋๋งํ ๋ถ๋ถ
return React.createElement("ul",
{className: "myClass"},
this.props.items.map(this.renderItem))
// ์ด๋ฐ์์ผ๋ก ์ปดํฌ๋ํธ ํด๋์ค ๋ด์ ๋ฉ์๋๋ฅผ ํ์ฉ ํ์ฌ ์์ฑํ ์ ์์ต๋๋ค.
}
}
// ๋ฆฌ์กํธ ๊ฐ์DOM์ ๋ ๋๋งํฉ๋๋ค.
// ๊ฐ์ DOM์์ ์ด์ ๋ฌธ์๋ฅผ ๋น๊ตํด ์๋ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํจ์จ์ ์ผ๋ก ์์ ํฉ๋๋ค.
ReactDOM.render(myComponent, document.getElementById('root'));
์ด๋ ๊ฒ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฝ๋๋ฅผ ์์ฑ ํ ์๋ ์์ต๋๋ค.
๋ฆฌ์กํธ์์ ์ฝ๊ณ ์ง๊ด์ ์ด๊ฒ ์ธ ์ ์๋ JSX๋ฌธ๋ฒ๋, ๊ฒฐ๊ตญ์๋ Babel์ ์ด์ฉํด ์์์ ๋ณธ ์ฝ๋๋ค๋ ๋ณํ๋ฉ๋๋ค.
๋ค์ ๊ธ์์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก JSX๋ฌธ๋ฒ๊ณผ ๋ฆฌ์กํธ์ ๋ํด ์์๋ด ์๋ค.
'๐ผ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 #2 ๋ฆฌ์กํธ.JS (0) | 2021.04.05 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev