๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (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) // .. ์ด์ 1 2 3 4 5 ยทยทยท 12 ๋ค์