React
[ReactJS] ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ์ Custom Hook
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ ๊ฐ๊ฐ์ ๊ด์ฌ์ฌ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ธฐ๋ฒ ์ฝ๋๊ฐ ํ๋์ ๊ด์ฌ์ฌ๋ง ์ ๊ฒฝ์ฐ๋๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ์ ํน์ง ํน์ ํ ๋ณํ์ ๋์ํ๊ธฐ ์ํด ์ฝ๊ณ ์ดํดํ๊ณ ์์ ํด์ผ ํ๋ ์ฝ๋์ ๋จ์๋ฅผ ์ค์ผ ์ ์์ด ์ ์ง ๋ณด์์ ์ฉ์ดํด์ง๋ค. ํ๋์ ์ฝ๋๊ฐ ํ๋์ ๊ธฐ๋ฅ์ ๋ด๋ดํ๊ธฐ์ ์ฌ๋ฌ ์ญํ ์ด ํผ์ฌ๋ ์ฝ๋๋ณด๋ค ๋จ์๋ณ๋ก ์ฌ์ฌ์ฉํ๊ธฐ ์ฌ์์ง๋ค. ์ฝ๋์ ๊ธฐ๋ฅ ํ ์คํธ ๋ํ ์ฌ์์ง๋ค. ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ๋ ์ํํธ์จ์ด๋ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋๋ ํน์ง์ด ๋ํ๋๋ค. ๋ฎ์ ๊ฒฐํฉ๋ (Loose Coupling) : ์ฝ๋๊ฐ ์ฝํ์์ง ์๊ณ ๊ด์ฌ์ฌ์ ๋ฐ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ์ ๋ถ๋ฆฌ๋์ด ์๋ค. ๋์ ์์ง๋ (High Cohesive) : ๋์ผํ ๋ชฉ์ (๊ด์ฌ์ฌ)๋ฅผ ๊ฐ์ง ์ฝ๋๋ผ๋ฆฌ ์ ๋ชจ์ฌ์๋ค. KISS ์์น Keep It Simple, Stup..
![[ReactJS] Dynamic Routing & Query String](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsZ9rf%2FbtrW553WNmd%2FXqVpkGaNw9WukTQc4mLsT1%2Fimg.png)
[ReactJS] Dynamic Routing & Query String
Dynamic Routing (๋์ ๋ผ์ฐํ ) ์ ์ Routing Routing์ ์ค์ ํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์์ ์ ์ Routing์ด๋ค. ์ ์ ๋ผ์ฐํ ์ Router ์ปดํฌ๋ํธ์์ ๋ฏธ๋ฆฌ ํ๋ก์ ํธ์ ์ฌ์ฉํ ๊ฒฝ๋ก๋ค๊ณผ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ๋ค์ ๋ชจ๋ ์ ์ํด๋๋ ๋ฐฉ์์ด๋ค. import React from 'react'; import { BrowserRouter, Route, Routes } from 'react-router-dom'; const Router = () => { return ( ) } export default Router; ํ์ง๋ง ๋ณต์กํ๊ณ ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ์ค์ ํ๋ Routing ๋ฐฉ์๋ง์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ํ๋ ์์ ์ด ์กด์ฌํ ์ ์๋ค. (Route๋ฅผ ์ ์ฐํ๊ฒ ์ ์ํ ์ ์์ผ๋ฏ๋ก) ๋์ ๋ผ์ฐํ ..
[ReactJS] Component์ ๋ถ๋ฆฌ์ ์ฌ์ฌ์ฉ (๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ)
์ปดํฌ๋ํธ ๋ถ๋ฆฌ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ ๋ณต์กํ ์ฝ๋๋ฅผ ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋๋ผ๋ฆฌ ๋ณ๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค. ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ณ๋ '๊ฐ๊ฐ์ ๊ด์ฌ์ฌ๋ฅผ ํด๊ฒฐํ๋ ๋ถ๋ถ'์ผ๋ก ๋ถ๋ฆฌํ๋ ๋์์ธ ์์น์ด๋ค. ์ปดํฌ๋ํธ ๋ณ๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค. ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์ React์์ ์ปดํฌ๋ํธ๋ ๋ค์ํ ์ญํ ์ ํ๋ค. ์ด๋ค ์ปดํฌ๋ํธ๋ UI๋ฅผ ํํํ๊ณ ์ ํ๊ณ , ๋ ์ด๋ค ์ปดํฌ๋ํธ๋ ๋์ํ๋ ๋ก์ง์ ๋ด์ ์ ์๋ค. ์์ ๋ ์ญํ ์ ๋ชจ๋ ๋ด๋ ์ปดํฌ๋ํธ ๋ํ ์กด์ฌํ๊ณ , ํ๋๋ ๋ด์ง ์๋ ์ปดํฌ๋ํธ๋ ์กด์ฌํ ์ ์๋ค. ์ด์ฒ๋ผ ์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉํ ์ ์๋ ์ต์ UI ๋จ์์์๋ ๋ถ๊ตฌํ๊ณ , ์น์ ๋ณต์ก๋์ ํด๋น ์ปดํฌ๋ํธ์์ ์ํํ๋ ค๊ณ ํ๋ ์ญํ ์ ๋ฐ๋ผ ์ผ๋ง๋ ์ง ๋ณต์กํด์ง ์ ์๋ค. ๋ฐ๋ผ์ '๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ'..
![[ReactJS] ์์ ๋ฐ์ดํฐ & Mock Data + fetch ๋งค์๋](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDul4s%2FbtrWXicnzKa%2F5XYlDHbutQ8ekIdm0yCnjk%2Fimg.png)
[ReactJS] ์์ ๋ฐ์ดํฐ & Mock Data + fetch ๋งค์๋
์์ ๋ฐ์ดํฐ๋? ๋ณํ์ง ์๋ ๋ฐ์ดํฐ React์์ ๋ฐ์ดํฐ๋ UI์ด๋ค. ์๊ฐ์ด ํ๋ฆ์ ๋ฐ๋ผ ๋ณํ๋ ๋ณ์ ๋ฐ์ดํฐ๋ก UI๋ฅผ ๋ง๋ค ๋ ๋ฐฑ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผ ํ๋ค. ๋ฐ๋ฉด ๋ณํ์ง ์๋ ์์ ๋ฐ์ดํฐ๋ก UI๋ฅผ ๋ง๋ค ๋ ๋ฐฑ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ํ์๊ฐ ์๋ค. ์์ ๋ฐ์ดํฐ ํ์ฉํ๊ธฐ /* App.js */ import React from "react"; const MENU_LIST = [ { id: 1, menuName: "New Repository" }, { id: 2, menuName: "Import Repository" }, { id: 3, menuName: "New Gist" }, { id: 4, menuName: "New Organization" }, { id: 5, menuName: "New ..
[ReactJS] Side Effect์ useEffect
Side Effect๋? Side Effect๋ ๋ถ์์ฉ์ด๋ค. ๋ถ์์ฉ === ๋ถ์ํจ๊ณผ ๋ถ์ํจ๊ณผ : ์ฃผ์ํ ํจ๊ณผ์ ๋ฐ๋ผ์ ๋ฐ์ํ๋ ๋ถ์์ ์ธ ํจ๊ณผ ๋ถ์์ฉ์ด๋ ์ฉ์ด ์์ฒด๋ ๋ถ์ ์ ์ธ ์๋ฏธ๋ฅผ ๋ดํฌํ์ง ์๋๋ค. ๋จ์ง ๋ถ์์ ์ผ๋ก ๋ฐ์ํ๋ ํจ๊ณผ๋ฅผ ์๋ฏธํ๋ ๋จ์ด์ด๋ค. ํ๋ก๊ทธ๋๋ฐ์์ Side Effect (๋ถ์์ฉ) ๋? ์ฝ๋๊ฐ ์๋ํ ์ฃผ๋ ํจ๊ณผ ์ธ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ ๋ถ์ ํจ๊ณผ ํนํ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ ๋จ์์ธ ํจ์์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฉ์ด ํจ์์ ๋ณธ์ง์ ์ธ ์ญํ (์ฃผ๋ ํจ๊ณผ) Input์ ๋ฐ์์ Output์ ์ฐ์ถํ๋ ๊ฒ Input => Output ํจ์์ ๋ถ์์ฉ (Side Effect) Input์ ๋ฐ์์ Output์ ์ฐ์ถํ๋ ๊ฒ ์ธ์ ๋ชจ๋ ํ์ ํจ์์์ ํจ์ ์ธ๋ถ์ ๊ฐ์ ์ฝ์ด์ค๋ ํ์ ํจ์์์ ํจ์ ์ธ๋ถ์ ๊ฐ..
[ReactJS] Hook & State & Props
Hook์ด๋? Hook์ ํด๋์ค ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ์ ์์๋ ์ํ ๊ด๋ฆฌ์ ๋ผ์ดํ ์ฌ์ดํด ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ์ฐ๋ํด์ฃผ๋ ํจ์๋ฅผ ์๋ฏธํ๋ค. ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ํจ์๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉ์ ํด ์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Hook์ด๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. Hook์ ๋ชจ์์ Hooks๋ผ ํ๋ค. Hook์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ๊ธฐ์กด์ ํด๋์ค ์ปดํฌ๋ํธ๋ง์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ์๋๋ฐ, ํจ์ ์ปดํฌ๋ํธ์ ์ฅ์ ์ผ๋ก ์ธํด ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋์ฆ๊ฐ ์ ์ ๋ง์์ง๊ฒ ๋์๋ค. ํจ์ ์ปดํฌ๋ํธ์ ์ฅ์ : ์ ์ธํ๊ธฐ ํธ๋ฆฌํจ, ์ง๊ด์ , ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ ์ฌ์ฉํจ ์ด๋ก ์ธํด ํด๋์ค ์ปดํฌ๋ํธ์์๋ง ๊ฐ๋ฅํ๋ ๊ธฐ๋ฅ์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉํ๊ณ ์ Hook์ด ๋ฑ์ฅํ์๋ค. Hook์ ํน์ง ํจ์ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. Hook์ ์ด๋ฆ..
[ReactJS] SPA & Routing
SPA & Routing SPA (Single Page Application) ์ ๊ฐ๋ SPA๋ ํ์ด์ง๊ฐ ํ๋์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ํ์ด์ง๋ html ํ์ผ์ ๋ปํ๊ธฐ ๋๋ฌธ์, SPA๋ ์น ์ฌ์ดํธ ์ ์ฒด์ HTML ํ์ผ์ด ํ๋์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ค. MPA์ ๋ฌ๋ฆฌ, SPA๋ html์ด ํ๋ ๋ฟ์ด๋ฏ๋ก ์ฌ๋ฌ ํ์ด์ง(UI)๋ฅผ ํ๋์ ํ์ด์ง์์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด Routing ๊ธฐ๋ฅ์ด ํ์ํ๋ค. Routing์ ๊ฐ๋ SPA์์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ Routing์ด๋ผ ํ๋ค. React ์์ฒด์๋ Routing ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์, React-Router์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด ์ฌ์ฉํด์ผ ํ๋ค. React-Router ์ค์น ๋ช ๋ น์ด : npm install react-route..
[ReactJS] JSX์ ์ปดํฌ๋ํธ (Component)
JSX JSX๋ JavaScript์ ๋ฌธ๋ฒ์ ํ์ฅํ React๋ง์ ๋ฌธ๋ฒ์ผ๋ก, JavaScript ๋ด์์ HTML ๋งํฌ์ ์ ์ฌ์ฉํ ์ ์๋๋ก ํ ๊ฒ์ด๋ค. ๋งํฌ์ ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก์ง์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ๋จํ์ฌ ์ด๋ฅผ ํ ๋ฒ์ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ ๊ฒฐ๊ณผ ์๊ฒจ๋ ๋ฌธ๋ฒ์ด๋ค. JavaScript ๋ด์์ ๋งํฌ์ ์ ์์ฑํ ์ ์๊ณ , JS ๋ก์ง๋ ํจ๊ป ์์ฑํ ์ ์๋ค. JavaScript ์ ์ ๋ฌธ๋ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฅผ ํด์ํ ์ ์๋ค. ๋ฐ๋ผ์ Babel ๋ณ์ญ๊ธฐ๋ก ์ด๋ฅผ React.createElement() ํจ์๋ก ๋ณํํ๋ ๊ณผ์ ์ด ๋ฐ๋์ ํ์ํ๋ค. JSX์ ํน์ง JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ด๋ค. ํน์ ํ ๋ณ์์ ์ด ๊ฐ์ ๋ด์ ์ ์๊ณ , ํจ์์ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ํจ์์ ๋ฆฌํด๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. f..
[ReactJS] React์ ํน์ง๊ณผ Virtual DOM
React์ ๋ํ์ ์ธ ํน์ง 2๊ฐ์ง ์ ์ธํ (Declarative Programming) ๋ฆฌ์ํธ๋ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ์ ์ฐจ์ vs ์ ์ธ์ ์ ์ฐจ์ (๋ช ๋ นํ) ํ๋ก๊ทธ๋๋ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ ์ฐจ(How)์ ์ค์ ์ ๋๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ง์ DOM์ ์กฐ์ํ๋ ๋ฐฉ์ ๋ชจ๋ ๊ณผ์ ์ ์ผ์ผ์ด ๊ธฐ์ ํด์ผ ํ๋ฏ๋ก ์์ฐ์ฑ์ด ์ ํ๋ ์ ์๋ค. ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌด์(What)์ธ์ง ์ ์ธํ๋ ํํ๋ก ํ๋ก๊ทธ๋๋ฐ ํ๋ ๋ฐฉ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ DOM ์กฐ์์ React์ ์์ ์ปดํจํฐ๋ ์ ์ฐจ์ ์ผ๋ก ๋์ํ๊ธฐ์ ๊ฒฐ๊ตญ ๋ชจ๋ ๋ช ๋ น์ ๋ค ์ ์ฐจ์ ์ผ๋ก ํด์ฃผ์ด์ผ ํ์ง๋ง, ๊ฐ๋ฐ์ ํ๋ ๊ฐ๋ฐ์๋ (์ต๋ํ ์ ์ฐจ์ ์ธ ๋ถ๋ถ์ ๊ฐ์ถ๊ฐ๋ ์์ํ๊ณ ) ์ ์ธ์ ์ธ ๋ถ๋ถ์๋ง ์ง์คํ๊ฒ ํ๋ ๋ฐฉ์์ด ์ ์ธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ค. ์ปดํฌ๋ํธ..
![[ReactJS] React JS ์๊ฐ ๋ฐ ์ค์น](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcASgeX%2FbtrWXh4JUIc%2FAzEk4c4zRjGl5K6qDF8D3K%2Fimg.png)
[ReactJS] React JS ์๊ฐ ๋ฐ ์ค์น
React JS์ ๊ฐ๋ ๊ณผ ํ์ ๋ฐฐ๊ฒฝ React ํ์ ๋ฐฐ๊ฒฝ ์น ์ ํ๋ฆฌ์บ์ด์ ์ด ๋ฑ์ฅํจ์ ๋ฐ๋ผ ์น ๊ฐ๋ฐ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ฒ ๋์๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ : ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์์ฉ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋๋ก ๋ง๋ ์น ์๋น์ค ์ด์ ๋ฐ๋ผ DOM์ ์ง์ ์กฐ์ํ๋ (Vanila JS, jQuery๋ฅผ ์ด์ฉํ๋) ๊ธฐ์กด์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ๊ณ๊ฐ ์๊ฒผ๋ค. ์ด๋ฌํ ์ํฉ์์ ์์ฐ์ค๋ฝ๊ฒ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์์ฐ์ฑ ํฅ์๊ณผ ๋์ด๋ ํํฅ์ ์ํ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๊ฐ ํ์ํ์๋ค. ์ด ์ค ํ์ฌ ์ ์ผ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒ์, React, Angular, Vue์ด๋ค. React JS๋? React JS (ํน์ React)๋ UI๋ฅผ ๊ตฌ์ถํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ด interactiveํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ (Framework) ์ด์ ..