๐ ๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ
01. ๋ฆฌ์กํธ๋ ์ด์ฉ๋ค ๋ง๋ค์ด์ก์๊น?
Javascript๋ ์ด๋ค ์ํ๊ฐ ๋ฐ๋๋ฉด, ๊ทธ ์ํ์ ์ฐ๊ฒฐ๋(getElementById) DOM์ ๋ณ๊ฒฝ!
React๋ ์ด๋ค ์ํ๊ฐ ๋ฐ๋๋ฉด, ์์ ์ ๋ถ ๋ค ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์๋ก์ด DOM์ ๋ณด์ฌ์ค!
=> ์ด๋ป๊ฒ ์ ๋ฐ์ดํธ ํด์ผ๋์ง.. ๊ณ ๋ฏผํ ํ์ ์์ด์ง ๊ฐ๋ฐ์ด ์ฌ์ด์ก๋ค
=> ๊ทผ๋ฐ ๋๋ฆฌ์ง ์์?
=> virtual DOM์ ์ฌ์ฉํด์ ๋ณ๊ฒฝ์ด ๋ ๋ถ๋ถ๊ณผ ์ ๋ ๋ถ๋ถ์ ๋น๊ตํด์ ๋ณ๊ฒฝ๋ ๊ฒ๋ง ์ค์ DOM์ ์ ์ฉ
=> ๊ทธ๋์ ๊ฒฐ๋ก ์ ๋น ๋ฅด๋ค!
02. ์์ ํ๊ฒฝ ์ค๋น
Node.js : for Webpack, Babel
Yarn : npm(node.js package manager) ์์๋ฒ์
์ฝ๋ ์๋ํฐ : VSC
Git bash
Webpack : ์ฌ๋ฌ๊ฐ์ง ํ์ผ(์ปดํฌ๋ํธ)์ ํ๊ฐ๋ก ๊ฒฐํฉ
Babel : JSX๋ฅผ ๋น๋กฏํ ์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์
03. ๋์ ์ฒซ๋ฒ์งธ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ
<Hello.js>
import React from 'react'; // ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ถ๋ฌ์จ๋ค
function Hello() {
return <div>์๋
ํ์ธ์</div>
}
export default Hello; // Hello ์ปดํฌ๋ํธ ๋ด๋ณด๋ธ๋ค
<App.js>
import React from 'react';
import Hello from './Hello';
function App() {
return (
<div>
<Hello />
</div>
);
}
export default App;
<index.js>
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root')); // Id๊ฐ root์ธ DOM ๋ ๋๋ง
<public/index.html>
<div id="root"></div>
04. JSX์ ๊ธฐ๋ณธ ๊ท์น ์์๋ณด๊ธฐ
JSX : JS + XML(HTML)
=> Babel์ด JSX๋ฅผ Javascript๋ก ๋ณํ์์ผ ์ค
[JSX ์์ {์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ} ์ฌ์ฉํ๊ธฐ]
<App.js>
import React from 'react';
import Hello from './Hello';
function App() {
const name = 'react';
return (
<>
<Hello />
<div>{name}</div>
</>
);
}
export default App;
[style๊ณผ className]
<App.js>
import React from 'react';
import Hello from './Hello';
import './App.css';
function App() {
const name = 'react';
const style = {
backgroundColor: 'black',
color: 'aqua',
fontSize: 24, // ๊ธฐ๋ณธ ๋จ์ px
padding: '1rem' // ๋ค๋ฅธ ๋จ์ ์ฌ์ฉ ์ ๋ฌธ์์ด๋ก ์ค์
}
return (
<>
<Hello />
<div style={style}>{name}</div>
<div className="gray-box"></div>
</>
);
}
export default App;
<App.css>
.gray-box {
background: gray;
width: 64px;
height: 64px;
}
05. props๋ฅผ ํตํด ์ปดํฌ๋ํธ์๊ฒ ๊ฐ ์ ๋ฌํ๊ธฐ
[๋น๊ตฌ์กฐํ ํ ๋น + defaultProps๋ก ๊ธฐ๋ณธ๊ฐ ์ค์ ]
<App.js>
import React from 'react';
import Hello from './Hello';
function App() {
return (
<>
<Hello name="react" color="red"/>
<Hello color="pink"/>
</>
);
}
export default App;
<Hello.js>
import React from 'react';
function Hello({ color, name }) {
return <div style={{ color }}>์๋
ํ์ธ์ {name}</div>
}
Hello.defaultProps = {
name: '์ด๋ฆ์์'
}
export default Hello;
[props.children]
<App.js>
import React from 'react';
import Hello from './Hello';
import Wrapper from './Wrapper';
function App() {
return (
<Wrapper>
<Hello name="react" color="red"/>
<Hello color="pink"/>
</Wrapper>
);
}
export default App;
<Wrapper.js>
import React from 'react';
function Wrapper({ children }) {
const style = {
border: '2px solid black',
padding: '16px',
};
return (
<div style={style}>
{children}
</div>
)
}
export default Wrapper;
06. ์กฐ๊ฑด๋ถ ๋ ๋๋ง
<App.js>
import React from 'react';
import Hello from './Hello';
import Wrapper from './Wrapper';
function App() {
return (
<Wrapper>
<Hello name="react" color="red" isSpecial={true}/>
<Hello color="pink" />
</Wrapper>
)
}
export default App;
<Hello.js>
import React from 'react';
function Hello({ color, name, isSpecial }) {
return (
<div style={{ color }}>
{isSpecial ? <b>*</b> : null}
{isSpecial && <b>*</b>}
์๋
ํ์ธ์ {name}
</div>
);
}
Hello.defaultProps = {
name: '์ด๋ฆ์์'
}
export default Hello;
A(true) && B : B
A(false) && B : false
'โ๏ธ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React ๊ณต๋ถํ๊ธฐ(4) - API ์ฐ๋ํ๊ธฐ (0) | 2021.11.05 |
---|---|
React ๊ณต๋ถํ๊ธฐ(2) - styled-components (0) | 2021.10.15 |
React ๊ณต๋ถํ๊ธฐ(1) - Hooks ์ข ๋ฅํธ (0) | 2021.10.10 |
React ๊ณต๋ถํ๊ธฐ(1) - ์ํ๊ด๋ฆฌ ไธญ ๋ฐฐ์ดํธ (0) | 2021.10.10 |
React ๊ณต๋ถํ๊ธฐ(1) - ์ํ๊ด๋ฆฌํธ (0) | 2021.10.10 |