πŸ“ƒ Front-End

πŸ“ƒ Front-End/React.js

React - Router κΈ°λ³Έ

βœ” CSR 라이브러리 μ„€μΉ˜ https://reactrouter.com/ 접속 Read the Docs 클릭 VScode ν„°λ―Έλ„μ—μ„œ λͺ…λ Ήμ–΄ μž…λ ₯ν•˜κ³  μ„€μΉ˜ μ„€μΉ˜κ°€ μ •μƒμ μœΌλ‘œ λ¬λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ package.json νŒŒμΌμ—μ„œ ν™•μΈν•˜κΈ° npm start 둜 ν”„λ‘œμ νŠΈ μ‹œμž‘ βœ” ν”„λ‘œμ νŠΈμ—μ„œ 직접 Page Routing μ‹œλ„ν•˜κΈ° ν˜„μž¬ 폴더 ꡬ쑰 βœ” λΈŒλΌμš°μ € URL κ³Ό React App 을 μ—°κ²° App.js import './App.css'; import { BrowserRouter } from 'react-router-dom'; // λΈŒλΌμš°μ € URL κ³Ό React App 을 μ—°κ²° ν•˜λŠ” κΈ°λŠ₯ function App() { return ( // μ΅œμƒμœ„ νƒœκ·Έλ‘œ 감싸기 App.js ); } export default A..

πŸ“ƒ Front-End/React.js

React SPA & CSR

Routing ❓ 경둜λ₯Ό μ •ν•΄μ£ΌλŠ” ν–‰μœ„ κ·Έ 자체 βœ” λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ 인터넷을 μ‚¬μš©ν•΄μ„œ μ›Ή μ‚¬μ΄νŠΈμ— 접속 ν•œλ‹€λŠ” 것은 λΈŒλΌμš°μ €λ₯Ό ν†΅ν•΄μ„œ μ›Ή μ„œλ²„μ—κ²Œ 경둜의 μš”μ²­μ„ μ „λ‹¬ν•˜κ³ , μ›Ή λ¬Έμ„œλ₯Ό λ°›μ•„λ³΄λŠ” μœ„μ™€ 같은 κ³Όμ • μž…λ‹ˆλ‹€. /home μ΄λΌλŠ” 경둜λ₯Ό μš”μ²­μ„ λ³΄λ‚΄κ²Œ 되면, /home 에 ν•΄λ‹Ήν•˜λŠ” μ›Ή λ¬Έμ„œμΈ Home.html 을 μ›Ή μ„œλ²„κ°€ λΈŒλΌμš°μ €μ—κ²Œ μ „λ‹¬ν•˜κ²Œ λ©λ‹ˆλ‹€. βœ” Page Routing μ–΄λ– ν•œ μš”μ²­μ— λ”°λΌμ„œ μ–΄λ–€ νŽ˜μ΄μ§€λ₯Ό λŒλ €μ€„μ§€ κ²°μ •ν•˜λŠ” 과정을 μΌμ»«λŠ” 말 μž…λ‹ˆλ‹€. ν˜„μž¬ REQUEST κ°€ /home μ΄λΌλŠ” 경둜둜 μš”μ²­μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€. μ›Ή μ„œλ²„λŠ” κ²½λ‘œμ— μ•Œλ§žλŠ” νŽ˜μ΄μ§€μΈ Home.html λ₯Ό 선별을 ν•΄μ„œ 돌렀주게 λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μš”μ²­μ— λͺ…μ‹œλ˜μ–΄ μžˆλŠ” κ²½λ‘œμ— λ”°λΌμ„œ μ•Œλ§žμ€ νŽ˜μ΄μ§€λ₯Ό μ„ νƒν•˜κ²Œ ν•˜λŠ” κ³Όμ • 자체λ₯Ό ..

πŸ“ƒ Front-End/React.js

Context API

μ»΄ν¬λ„ŒνŠΈ νŠΈλ¦¬μ— 데이터 곡급 βœ” 계측 ꡬ쑰 μœ„μ˜ 사진은 ν˜„μž¬ λ§Œλ“€μ–΄λ³Έ ν”„λ‘œμ νŠΈμ˜ 계측 ꡬ쑰 λŠ” 3 개의 props 을 λ°›μ§€λ§Œ, κ·Έ 쀑에 λΉ¨κ°„μƒ‰μœΌλ‘œ 두 κ°œλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” props μž…λ‹ˆλ‹€. μ „λ‹¬λ§Œ ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ 쀑간에 많이 μƒκΈ°κ²Œ λ˜λŠ” κ²½μš°μ—λŠ” props 의 이름도 λ°”κΎΈκΈ°κ°€ μ–΄λ €μ›Œμ§€κ³ , μ½”λ“œ μž‘μ„±κ³Ό μˆ˜μ •μ— μ•…μ˜ν–₯을 미치게 λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 상황을 마치 props κ°€ λ“œλ¦΄μ²˜λŸΌ 땅을 파고 λ“€μ–΄κ°„λ‹€κ³  props λ“œλ¦΄λ§ 이라고 λΆ€λ¦…λ‹ˆλ‹€. λΆ€λͺ¨μ—κ²Œμ„œ μžμ‹μœΌλ‘œλ§Œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 단방ν–₯ 데이터 흐름을 μ§€ν‚€λŠ” React 의 λ¬Έμ œλΌκ³ λ„ 생각 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. βœ” Context 의 κ°œλ… λͺ¨λ“  데이터λ₯Ό 가지고 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ Provider 라고 κ³΅κΈ‰μž 역할을 ν•˜λŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—κ²Œ μžμ‹ μ΄ 가지고 μžˆλŠ” λͺ¨λ“  데이터..

πŸ“ƒ Front-End/React.js

useReducer

μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ³€ν™” λ‘œμ§μ„ 뢄리 ν•„μš”μ„± ❓ useState λ₯Ό μ΄μš©ν•˜λ©΄ μœ„μ˜ 처럼 μƒνƒœ λ³€ν™” ν•¨μˆ˜λ₯Ό 각각 Counter μ»΄ν¬λ„ŒνŠΈ μ•ˆμ— μž‘μ„±μ„ ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 이와 같은 경우 μ»΄ν¬λ„ŒνŠΈμ˜ μ½”λ“œκ°€ 길어지고 볡작 ν•  수 밖에 μ—†μŠ΅λ‹ˆλ‹€. useReducer 을 μ‚¬μš©ν•˜λ©΄ ❓ μ™Όμͺ½μ— λ³΄μ΄λŠ” reducer λΌλŠ” μƒνƒœ λ³€ν™” ν•¨μˆ˜λ₯Ό μ»΄ν¬λ„ŒνŠΈ λ°–μœΌλ‘œ 뢄리λ₯Ό ν•˜μ—¬ λ‹€μ–‘ν•œ μƒνƒœλ³€ν™” λ‘œμ§μ„ μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€λ‘œ 뢄리λ₯Ό ν•΄μ„œ μ‰½κ²Œ 처리 ν•  수 있게 λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆλ‹€. useReducer λŠ” useState λ₯Ό λŒ€μ²΄ ν•  수 μžˆλŠ” κΈ°λŠ₯ μž…λ‹ˆλ‹€. βœ” λ™μž‘ - 1 const Counter = () => { const [count, dispatch] = useReducer(reducer, 1); //const [ state, μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€λŠ”..

πŸ“ƒ Front-End/React.js

μ΅œμ ν™” - useCallback

문제점 ❓ 전에 λ§Œλ“  일기 ν”„λ‘œμ νŠΈμ—μ„œ 일기λ₯Ό μ‚­μ œν•˜λ©΄ 일기λ₯Ό μƒμ„±ν•˜λŠ” Editor κ°€ λ Œλ”λ§μ΄ λ©λ‹ˆλ‹€. ν…Œλ‘λ¦¬λ₯Ό 잘보면 깜빑 μž…λ‹ˆλ‹€. 일기λ₯Ό μ‚­μ œ ν•˜λŠ” κ³Όμ •μ—μ„œ 일기 Editor κ°€ λ Œλ”λ§μ΄ 될 μ΄μœ λŠ” μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ Editor λ₯Ό μ΅œμ ν™” ν•˜κ² μŠ΅λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§μ΄ μΌμ–΄λ‚˜λŠ” 쑰건은 본인이 가지고 μžˆλŠ” state 의 λ³€ν™”κ°€ μƒκΈ°κ±°λ‚˜, λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§μ΄ μΌμ–΄λ‚˜κ±°λ‚˜, μžμ‹ μ΄ 받은 prop 이 λ³€κ²½λ˜κ²Œ λ˜λŠ” 경우 λ¦¬λ Œλ”λ§μ΄ μΌμ–΄λ‚©λ‹ˆλ‹€. βœ” DiaryEditor.js const DiaryEditor = ({ onCreate }) => { export default React.memo(DiaryEditor); // React.memo μ‚¬μš© ν˜„μž¬ DiaryEditor λŠ” onCreate ν•˜..

πŸ“ƒ Front-End/React.js

μ΅œμ ν™” - React.memo

μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš© ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—κ²Œ μ—…λ°μ΄νŠΈ 쑰건을 κ±ΈκΈ° βœ” μ»΄ν¬λ„ŒνŠΈ 트리 App μ»΄ν¬λ„ŒνŠΈλŠ” 각각 count 와 text 두 개의 state λ₯Ό κ°€μ§‘λ‹ˆλ‹€. counst state λŠ” CountView μ—κ²Œ , text state λŠ” TextView μ»΄ν¬λ„ŒνŠΈ μ—κ²Œ prop 으둜 각각 보내주고 μžˆμŠ΅λ‹ˆλ‹€. μš°μΈ‘μ— ν‘œμ‹œλœ μˆœμ„œλŒ€λ‘œ μ½”λ“œλ₯Ό μˆ˜ν–‰ν•˜λ©΄μ„œ μ–΄λ–»κ²Œ μ—…λ°μ΄νŠΈ λ˜λŠ”μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€. βœ” μˆœμ„œ setCount(10) 이 싀행이 λ˜λ©΄μ„œ App μ»΄ν¬λ„ŒνŠΈμ˜ count state 의 값을 λ³€ν™” μ‹œν‚¬ μ˜ˆμ •μž…λ‹ˆλ‹€. 그러면 App μ»΄ν¬λ„ŒνŠΈμ˜ count state 의 값이 λ°”λ€Œκ²Œ 되고, state κ°€ μ—…λ°μ΄νŠΈ λ˜μ—ˆκΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή state λ₯Ό 가진 App μ»΄ν¬λ„ŒνŠΈλŠ” λ¦¬λ Œλ”λ§μ΄ 되게 λ©λ‹ˆλ‹€. κ·Έλ ‡κ²Œλ˜λ©΄ prop 인 CountVi..

πŸ“ƒ Front-End/React.js

μ΅œμ ν™” - useMemo

μ—°μ‚° κ²°κ³Ό μž¬μ‚¬μš© ν•˜λŠ” 방법 βœ” μ •μ˜ 이미 계산 ν•΄ λ³Έ μ—°μ‚° κ²°κ³Όλ₯Ό κΈ°μ–΅ ν•˜κ³  μžˆλ‹€κ°€, λ˜‘κ°™μ€ 계산을 μ‹œν‚€λ©΄ λ‹€μ‹œ κ³„μ‚°ν•˜μ§€ μ•Šκ³  λ‹΅λ§Œ λ°˜ν™˜ν•˜λŠ” 방법 Ex) μˆ˜ν•™ μ‹œν—˜μ„ λ³Ό λ•Œ, 이미 ν’€μ–΄λ³Έ λ¬Έμ œλŠ” λ‹€μ‹œ 풀어보지 μ•Šμ•„λ„ 정닡을 μ•Œκ³  μžˆλŠ” 것 emotion 별 일기의 κ°œμˆ˜μ™€ λΉ„μœ¨ βœ” App.js const getDiaryAnalysis = () => { console.log('일기 뢄석 μ‹œμž‘') const goodCount = data.filter((it)=>it.emotion >= 3).length; const badCount = data.length - goodCount; const goodRatio = (goodCount / data.length) * 100; return {goodCount, badC..

πŸ“ƒ Front-End/React.js

React developer tools

https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=ko Chrome 의 ν™•μž₯ 도ꡬ React 개발 μ‹œ νŽΈμ˜μ„±μ„ μ€λ‹ˆλ‹€. βœ” React app 을 개발 ν•˜κ³  있으면 μœ„μ˜ λͺ¨μ–‘ 처럼 λ°”λ€λ‹ˆλ‹€. βœ” μ°Έκ³ ν•˜λ©΄ 쒋은 μ‚¬μ΄νŠΈ https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pjt3591oo&logNo=221907792621

HoHo.dev
'πŸ“ƒ Front-End' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (8 Page)