๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(91)
React / ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (1) - ๋‚ด๋ถ€ React๋Š” ๋Œ€ํ‘œ์ ์ธ SPA(Single Page Application) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.SPA๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ด๋ฅผ ๊ฐ์ง€ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฆฌ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. React์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.๋‚ด๋ถ€์™ธ๋ถ€useStateContextAPIRedux, Redux ToolkitRecoil, MobX, Zustand, Jotai ... ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ์˜ ์žฅ์ Props Drilling ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ํ•  ๋•Œ, ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค๊นŒ์ง€ props๋ฅผ ๊ณ„์† ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด์ „์— ํ–ˆ๋˜ todo list ๋งŒ๋“ค๊ธฐ์—๋„ props drilling์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ..
React / openweatherapi ์‚ฌ์šฉํ•˜๊ธฐ ์–ด์ œ๋Š” openweathermap API๋กœ ํ˜„์žฌ ๋‚ด ์œ„์น˜์˜ 5์ผ๊ฐ„์˜ ๋‚ ์”จ๋ฅผ ๋ฐ›์•„์˜ค๊ณ ,styled-components๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ ์—ฐ๋™ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ์–ด์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด๋‘๊ณ ์ž ํ•œ๋‹ค (์˜ˆ์ „์— ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ๋Š” ๋ฐ›์•„์™”๋Š”๋ฐ๋„... )์ผ๋‹จ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ App.jsx์— ํ•œ๋ฒˆ์— ์ ์–ด๋†จ๋‹ค App.jsx๋”๋ณด๊ธฐimport { useState, useEffect } from 'react';import { styled, createGlobalStyle } from 'styled-components';// styled-components ------------------const Container = styled.div` width: 100vw; height: 1..
React / Todo-List ๋งŒ๋“ค๊ธฐ (2) 1ํƒ„ : https://hydeveloper.tistory.com/191 ์ด๋ฒˆ์—๋Š” useState, useEffect, useRef์™€ json.server๋ฅผ ํ™œ์šฉํ•ด CRUD ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ todoList๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”๋ฐ์ผ๋‹จ ํ•ด๋‹น ๊ณผ์ œ๋Š” ๊นƒํ—ˆ๋ธŒ์— ์—…๋กœ๋“œํ•ด๋†จ๋‹ค.. https://github.com/idubusomuch/Todo-app-json ์ตœ์†Œ ์š”๊ตฌ ์‚ฌํ•ญTodo ์ƒ์„ฑ / ์กฐํšŒ / ์ˆ˜์ • / ์‚ญ์ œ (CRUD) ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”.ํ˜„์žฌ ์‹œ๊ฐ„ ํ‘œ์‹œ, ํƒ€์ด๋จธ, ์Šคํ†ฑ์›Œ์น˜ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”.๋žœ๋ค ๋ช…์–ธ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ์„ธ์š”.useState, useEffect, useRef๋ฅผ ๊ฐ๊ฐ ํ•œ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉํ•˜์„ธ์š”.์ž์œ ๋กญ๊ฒŒ ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€ CSS๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.์‹ฌํ™” ์š”๊ตฌ ์‚ฌํ•ญjson-server๋ฅผ ์‚ฌ..
React / ์Šคํƒ€์ผ๋ง (3) - tailwindcss Tailwind CSS๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ Utility-First CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์ด๋ฏธ ์ž‘์„ฑ๋œ CSS์ฝ”๋“œ๊ฐ€ ํด๋ž˜์Šค๋กœ ์ง€์ •๋˜์–ด ์žˆ์–ด ์ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. *Utility-First CSS : ๋ฏธ๋ฆฌ ์„ธํŒ…๋œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ HTML์ฝ”๋“œ ๋‚ด์—์„œ CSS๋ฅผ ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋œป ํ•œ๋‹ค.*์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค : ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ์„ ๋ชจ์•„์„œ ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Tailwind CSS์˜ ์žฅ๋‹จ์ ์žฅ์ CSS ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ => ๊ฐœ๋ฐœ์†๋„๊ฐ€ ๋นจ๋ผ์ง์ฒด๊ณ„์ ์ด๊ณ  ์ผ๊ด€๋œ ๋””์ž์ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๋‹จ์ ์ดˆ๊ธฐ ์„ค์ •์ด ๋ณต์žกํ•จ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์•ˆ์ข‹์•„์ง (ํŠนํžˆ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์„ ์ ์šฉ ํ•  ๋•Œ๋Š” ์ •๋ง ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋”๋Ÿฌ์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค)css์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜..
React / ์Šคํƒ€์ผ๋ง (2) - Styled Components CDD (Component Driven Development) : ํ™”๋ฉด์„ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก  ๋ฆฌ์•กํŠธ๋Š” CDD๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๊ทธ๋ž˜์„œ js ์•ˆ์— html์„ ๋„ฃ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, Styled Components๋Š” css๋„ ํฌํ•จํ•ด์„œ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑํ•ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค. Styled ComponentsCSS-in-JS ๋ฐฉ์‹(css ๋‚ด์šฉ๋„ javascript ์•ˆ์—์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ)์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์Šคํƒ€์ผ์„ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. Styled Components์˜ ์žฅ๋‹จ์ ์žฅ์ CSS๋„ ์ปดํฌ๋„ŒํŠธํ™” ํ•  ์ˆ˜ ์žˆ์ŒCSS์™€ JS์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์‰ฌ์›€ (์•„๋ฌด๋ž˜๋„ ๊ฐ™์€ ํŒŒ์ผ์—์„œ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—)Cla..
React / ์Šคํƒ€์ผ๋ง (1) - SCSS SASS(Syntactically Awesome Style Sheets) ๊ธฐ์กด CSS์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฌธ๋ฒ•CSS ์ฝ”๋“œ ์ค‘์ฒฉ, ๋ณ€์ˆ˜ํ™”, ์†์„ฑ ์žฌ์‚ฌ์šฉ ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ ์ œ๊ณต SCSS(Sassy CSS) SASS 3๋ฒ„์ „์—์„œ ๋“ฑ์žฅํ•œ SASS์˜ ์‹ ๋ฒ„์ „์œผ๋กœ ํ˜ธํ™˜์„ฑ, ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง (๊ธฐ์กด๊ณผ ๋‹ฌ๋ฆฌ ์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉ) ์‚ฌ์šฉ ์ค€๋น„์„ค์น˜npm install sass scss ํ™•์žฅ์ž๋กœ ๋ณ€๊ฒฝApp.scssindex.scss + App.jsx์™€ main.jsx์—์„œ Importํ•˜๋Š” cssํŒŒ์ผ๋„ ๋ฐ”๊ฟ”์ฃผ๊ธฐ!// app.jsximport './App.scss'// main.jsximport './index.scss' ๋ฌธ๋ฒ•1. ๋ณ€์ˆ˜์‚ฌ์šฉ๋ฐฉ๋ฒ•/* ์„ ์–ธ */$๋ณ€์ˆ˜๋ช… : ๊ฐ’;/* ์‚ฌ์šฉ */์„ ํƒ์ž { ์†์„ฑ : $..
React / custom Hook Custom Hook์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” Hook์œผ๋กœ use๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๋ฉด ๋œ๋‹ค.์ค‘๋ณต ๋˜๋Š” ๋ถ€๋ถ„์„ ํ›…์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€ ๋ณด์ˆ˜์„ฑ ๋ฐ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.  ์˜ˆ์‹œ - Counter +, - ๋ฒ„ํŠผ์œผ๋กœ ์ˆซ์ž๋ฅผ ์ฆ๊ฐ€ ๊ฐ์†Œ ์‹œํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ์ปค์Šคํ…€ ํ›…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ)UI์™€ ์ƒํƒœ๊ฐ€ ๊ฒฐํ•ฉ๋ผ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ค์›€ (App ์ปดํฌ๋„ŒํŠธ์˜ return๋ฌธ์—์„œ ์—ฌ๋Ÿฌ๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ ์“ธ์ˆ˜๋Š” ์žˆ๋‹ค...)๋งŒ์•ฝ ๋˜‘๊ฐ™์€ ๋กœ์ง์„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์“ฐ๋ ค๋ฉด ๋ณต๋ถ™ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•จ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ๋Š” UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ๋กœ์ง, ์ƒํƒœ ๋“ฑ์ด ๋ณต์žกํ•ด์ง€๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณต์žกํ•ด์งfunction App() { return ( ..
React / useRef ์ œ์–ด ์ปดํฌ๋„ŒํŠธ vs useRef useState์ œ์–ด ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ• ๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ์ž…๋ ฅ ๊ฐ’์˜ ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ๋ฐ˜์˜์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ์ค„ ๋•Œ ์‚ฌ์šฉํผ ๊ฒ€์ฆ, ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰, UI ๋ฐ˜์‘ ๋“ฑ์— ์‚ฌ์šฉ useRef๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ์ž…๋ ฅ๊ฐ’์€ DOM์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ด๋ Œ๋”๋ง๊ณผ ๋ฌด๊ด€ํ•ด์„œ, ๋ฆฌ๋ Œ๋”๋ง๋ผ๋„ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ์ตœ์ข… ์ž…๋ ฅ ๊ฐ’๋งŒ ํ•„์š”ํ•  ๋•Œ, ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๊ตณ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ๋กœ๊ทธ์ธ ์ฐฝ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ๋“ฑ์— ์‚ฌ์šฉ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ƒ DOM์„ ํ†ตํ•ด ์‹ค์ œ DOM์„ ์กฐ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์จ์•ผํ•จ    useRef์‚ฌ์šฉ๋ฐฉ๋ฒ•1. DOM ์ฃผ์†Œ๋ฅผ ๋‹ด์•„์ค„ ๊ณต๊ฐ„ ์ƒ์„ฑconst domRef = useRef(null) // ..