React
๐ป ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ง๋ค๊ธฐ ์ํ Javascript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ๏ธ ์ฌ์ฉ์ด์ ?
UI๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํด์ค ( ๊ฐ์ ๋ virtual Dom์ ํตํด UI๋ฅผ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ)
virtual Dom : ์ด์ UI์ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํด์, ๋ณ๊ฒฝ๋ UI์ ์ต์ ์งํฉ์ ๊ณ์ฐ ( ๋ถํ์ํ UI์ ๋ฐ์ดํธ ์ค, ์ฑ๋ฅํฅ์)
โ๏ธ ์์ ํ๊ฒฝ
Node. js : js๊ฐ ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ๋์ํ๊ฒ ํ๋ ํ๊ฒฝ
npm : ๋ค์ํ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํ ์ ์์
React Native : ์น> ์ฑ / ์๋๋ก์ด๋ & ios๋์์ ๊ฐ๋ฅ
React VS React.DOM
react : component๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
react.DOM : component๋ฅผ ๊ฐ์ ธ์ DOM์ renderingํ๋ library (์ค์ DOM๊ณผ ์ํธ์์ฉ)
๐ป react์์ render๋๋ ๊ณผ์
index.html์ <div class=container>์ ์๋ง์ component๋ค์ด render๋๋ ๊ฒ.
(์ต์์ ๋ฃจํธ์ธ container์์์์ ์์์ผ๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ด๋ค.)
//src - index.js
import React from "react";
import ReactDOM from "react-DOM";
const App = () => {
return <div> hi</div>;
};
ReactDOM.render(<App />, document.querySelector(".container"));
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/style/style.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAq06l5RUVfib62IYRQacLc-KAy0XIWAVs"></script>
</head>
<body>
<div class="container"></div>
</body>
<script src="/bundle.js"></script>
</html>
โ๏ธ ์์ ํ๊ฒฝ
Node. js : js๊ฐ ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ๋์ํ๊ฒ ํ๋ ํ๊ฒฝ
npm : ๋ค์ํ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํ ์ ์์
React Native : ์น> ์ฑ / ์๋๋ก์ด๋ & ios๋์์ ๊ฐ๋ฅ
CRA
Create-React-App
: ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ํด์ฃผ๋ ๋๊ตฌ
โ๏ธ CRA ์ค์น
1. ๋ฆฌ์กํธ ํ๋ก์ ํธ ์์ฑ
npx create-react-app ํ๋ก์ ํธ๋ช
2. react-app์ ์ ๊ทผ
cd ํ๋ก์ ํธ๋ช
3. ๊ฐ๋ฐ๋ชจ๋ ์คํ
npm start ( https://localhost : 3000 ์ ์๋ ์ฐฝ )
4. ๊ฐ๋ฐ๋ชจ๋ ์ข ๋ฃ
ctrl + c
CRA ๊ธฐ๋ณธ ํด๋ ๋ฐ ํ์ผ ๊ตฌ์ฑ
> node.modules
CRA ๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํจํค์ง ์์ค ์ฝ๋๊ฐ ์กด์ฌ
(github์ ์ฌ๋ฆด๋ ๋ถํ์ํจ > .gitignoreํ์ผ์ ์ถ๊ฐ)
> package.json
CRA ๊ธฐ๋ณธ ํจํค์ง ์ธ ์ถ๊ฐ๋ก ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํจํค์ง ์ ๋ณด(์ข ๋ฅ, ๋ฒ์ )๊ฐ ๊ธฐ๋ก
( ์ค์ ๋ด์ฝ๋์ ์ค์น ํจํค์ง๋ ๋ด ๋ก์ปฌ์๋ง ์กด์ฌ > github์ฌ๋ฆด๋ package.json๋๊ธฐ๋ฉด ๋ค๋ฅธ์ฌ๋์ด pull๋ฐ์์
npm install๋ง ์ ๋ ฅํ๋ฉด package.jsonํ์ธํ์ฌ ์๋์ค์น)
์ฐธ๊ณ ) ์๋ก์ด Library(package) ์ค์น ์
> npm์ผ๋ก ์ค์น (ex. npm install slider)
์ค์น ์ node modules ์ ์๋์ค์น ๋์ง๋ง package.json - dependencies ์ ์ถ๊ฐ ์๋์ผ๋ก ๋๋ ๊ฑด ์๋.
๊ทธ๋์, npm install slider —-save ( —-save ๊น์ง ์์ฑํด์ผ dependencies ์ ์ถ๊ฐ)
"scripts"
run : ํ๋ก์ ํธ๋ฅผ development mode(๊ฐ๋ฐ ๋ชจ๋) ์คํ์ ์ํ ๋ช ๋ น์ด. npm run start.
build : ํ๋ก์ ํธ production mode(๋ฐฐํฌ ๋ชจ๋) ์คํ์ ์ํ ๋ช ๋ น์ด. ์๋น์ค ์์ฉํ.
> gitignore
.gitignore ํ์ผ์ github ์ ์ฌ๋ฆฌ๊ณ ์ถ์ง ์์ ํด๋์ ํ์ผ์ ์์ฑ
> public ํด๋
index.html / images - ์ด๋ฏธ์ง ํ์ผ ๊ด๋ฆฌ / data - mock data ๊ด๋ฆฌ
> public - index.html
<div id="root"></div>
CRA์๋ htmlํ์ผ์ด index ํ๊ฐ. (๋ฆฌ์กํธ๋ก ๋ง๋ ์ฑ์ single page application ์ด๊ธฐ ๋๋ฌธ)
> src ํด๋
components - ๊ณตํต ์ปดํฌ๋ํธ ๊ด๋ฆฌ
pages - ํ์ด์ง ๋จ์์ ์ปดํฌ๋ํธ ํด๋๋ก ๊ตฌ์ฑ ( Login - Login.js, Login.scss ) ( Main- Main.js, Main.scss )
styles ํด๋ ( reset.scss - css ์ด๊ธฐํ ) ( commom.scss - ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ css ์์ฑ ์ ์ )
index.js / App.js ์ ์ธ ์ญ์
> src - index.js (๊ณ ์ )
React์ ์์ (Entry Point)
ReactDOM.render( <App /> , document.getElementById('root'))
( ReactDOM.render ํจ์์ ์ธ์๋ ๋ ๊ฐ
์ฒซ ๋ฒ์งธ ์ธ์๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ์ปดํฌ๋ํธ, ๋ ๋ฒ์งธ ์ธ์๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ์ปดํฌ๋ํธ์ ์์น)
> src - App.js
ํ์ฌ ํ๋ฉด์ ๋ณด์ฌ์ง๊ณ ์๋ ์ด๊ธฐ ์ปดํฌ๋ํธ
์ฐธ๊ณ ) components vs. pages
์ฌ๋ฌ ํ์ด์ง์์ ๋์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ components ํด๋์์ ๊ด๋ฆฌ (ex. Header, Nav, Footer)
ํ์ด์ง ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ pages ํด๋์์ ๊ด๋ฆฌ.
ํด๋น ํ์ด์ง ๋ด์์๋ง ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ํด๋น ํ์ด์ง ์ปดํฌ๋ํธ ํด๋ ํ์์์ ๊ด๋ฆฌ.
'โข React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Router (0) | 2021.10.24 |
---|---|
[React] React hook basic (0) | 2021.10.21 |
[REACT] State / Event (0) | 2021.09.04 |
[REACT] Component / Props / Mock data (0) | 2021.09.01 |
[REACT] JSX / Component (0) | 2021.08.30 |