react
-
- [React.js] React Query DevtoolsReact Query Devtools๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ์ฟผ๋ฆฌ(React Query/Tanstack Query)์ ๊ฐ๋ฐ์ ๋๊ตฌ(Devtools)๋ฅผ ์ค์น ๋ฐ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. React Query Devtools๊ฐ๋ ์ํ ๊ด๋ฆฌ์ ์๋ฒ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ๋๋ฒ๊น ํ๊ธฐ ์ํ ๊ฐ๋ฐ ๋๊ตฌReact Query๊ฐ ๊ด๋ฆฌํ๋ ์ฟผ๋ฆฌ(Query)์ ๋ฎคํ ์ด์ (Mutation) ์ํ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ๋ฐ์ดํฐ ํ๋ฆ์ ์ถ์ ํ๊ณ , ๋ฌธ์ ๋ฅผ ํ์ ํ๊ฑฐ๋ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋์์ ์ค๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ฟผ๋ฆฌ ์ํ ํ์ธํ์ฌ ์คํ ์ค์ธ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ํ(์: @loading@, @success@, @error@ ๋ฑ)๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ค.๋ํ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ, ์ฟผ๋ฆฌ ํค, ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ์..
2024.09.22 -
- [Job Preparation] ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (React.js)๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (React.js)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js) ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ์ ์ํด์ ํ์ํ ๊ณผ์ ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค. Node.jsLTS ๋ฒ์ ์ผ๋ก ์ค์นํ๊ธฐLong Term Service, ์ฅ๊ธฐ ์ง์ ๋ฒ์ Node.js — Run JavaScript EverywhereNode.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.nodejs.org ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ NVM(Node Version Manager)๋ฅผ ์ค์นํ๋ค. Releases · coreybutler/nvm-windowsA node.js version management utility for Windows. Ironically written in Go. - coreyb..
1 2024.09.20 -
- [React.js] ์ฝ๋ ๋ถํ (Code Splitting) : useTransition ํ , Suspense ์ปดํฌ๋ํธ, lazy ํจ์์ฝ๋ ๋ถํ (Code Splitting) : useTransition ํ , Suspense ์ปดํฌ๋ํธ, lazy ํจ์๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฝ๋ ๋ถํ (Code Splitting)์ ์ฅ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ @useTransition@ ํ ๊ณผ @Suspense@ ์ปดํฌ๋ํธ, @lazy@ ํจ์์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ฝ๋ ๋ถํ (Code Splitting)๊ฐ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๋์ ์ผ๋ถ๋ถ์ ๋๋ ์ ํ์ํ ์์ ์ ๋ก๋ํ๋ ๋ฐฉ์ ์ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์์ ์ฒญํฌ(Chunk)๋ก ๋๋์ผ๋ก์จ ์ด๊ธฐ ๋ก๋ ์ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.์ด๋ฅผ ํตํด ์ฒซ ํ๋ฉด ๋ ๋๋ง ์๋๊ฐ ๋นจ๋ผ์ง๋ฉฐ, ๋๋ฆฐ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ๋น ๋ฅด๊ฒ ์๋ตํ ์ ์๋ค.์ฌ์ฉ์๊ฐ ํ์๋ก ํ์ง ์๋ ์ฝ๋๋ ๋์ค์ ๋ก๋๋๋ฉฐ, ์ํธ์์ฉํ ๋๋ง ํ์ํ ์ฝ๋๊ฐ ๋..
2024.09.20 -
- [React.js] useMemo ํuseMemo ํ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์ @useMemo@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useMemo ํ ๊ฐ๋ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ ์ต์ ํ(Optimization)๋ฅผ ์ํด ์์ฃผ ์ฌ์ฉ๋๋ ํ ํน์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)ํ์ฌ ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ ํด๋น ์ฐ์ฐ์ ๋ค์ ์ํํ์ง ์๋๋ก ํ๋ค.๋ถํ์ํ ์ฌ์ฐ์ฐ์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ฉ๋ชจ์ด์ ์ด์ ํ ๊ฐ์ ๋ฐํ(return)ํ๋ ํจ์์ด๋ค. (@computeExpensiveValue@).๋ ๋ฒ์งธ ์ธ์๋ ์์กด์ฑ ๋ฐฐ์ด(Dependency Array)๋ก, ์ด ๋ฐฐ์ด์ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋ ๋๋ง ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ด ๋ค์ ๊ณ์ฐ๋๋ค.const memoizedValue = useMemo(() => computeE..
2024.09.20 -
- [React.js] useCallback ํuseCallback ํ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฌ์ฉ๋๋ @useCallback@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useCallback ํ ๊ฐ๋ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ ์ต์ ํ(Optimization)๋ฅผ ์ํด ์์ฃผ ์ฌ์ฉ๋๋ ํ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)ํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ํจ์๊ฐ ์ฌ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ@useCallback(() => {}, [])@์ ๊ฐ์ด ์ฌ์ฉํ๋ค.์ฒซ ๋ฒ์งธ ์ธ์๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก ์์กด์ฑ ๋ฐฐ์ด(Dependencies Array)์ ๋ฐ๋๋ค.const memoizedCallback = useCallback(() => { doSomething(a, b);}, [a, b]); ⇒ ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ํด๋น ํจ์๋ฅผ ๋ค์ ์์ฑํ์ง ์๊ณ ,..
2024.09.20 -
- [React.js] React.memo()React.memo()๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ ๊ณตํ๋ ๊ณ ์ฐจ ํจ์(Higher-Order Component)์ธ @React.memo()@์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. React.memo()๊ฐ๋ ๋ฆฌ์กํธ์์ ์ ๊ณตํ๋ ๊ณ ์ฐจ ํจ์(Higher-Order Component)ํจ์ํ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ์ญํ ์ ํ๋ค.์ ๋ฌ๋ @props@๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ ํด๋น ์ปดํฌ๋ํธ๋ ๋ค์ ๋ ๋๋ง๋์ง ์๋๋ก ์ต์ ํ(Optimization)ํ ์ ์๋ค.@React.memo()@๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ธ์๋ก ๋ฐ์, ๊ทธ์ ๋์ผํ ๋์์ ํ๋ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ๋ฐํํ์ง๋ง, ์ถ๊ฐ์ ์ผ๋ก @props@๊ฐ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ๋ ์ต์ ํ ์์ ์ด ์ถ๊ฐ๋๋ค.@props@๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ, ๋ฉ๋ชจ์ด์ ์ด์ ๋ ์ปดํฌ๋ํธ๋ ์ด์ ๋ ๋๋ง์์..
2024.09.18 -
- [React.js] Context API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๊ธฐContext API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๊ธฐ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ Context API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.Context API๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ๋ก ํจํค์ง๋ฅผ ์ค์นํ์ง ์๊ณ ๋ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค. Context API๊ฐ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ์ ์ญ ์ํ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ API์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด, ํ๋กญ ๋๋ฆด๋ง(Props Drilling)์ ํผํ ์ ์๋ค. ๋ฐฉ๋ฒโ context ํ์ผ ์์ฑํ๊ธฐ์ ์ญ์ผ๋ก ์ฌ์ฉํ ์ํ๋ฅผ ์ ์ํ๋ @Context.js@ ํ์ผ์ ์์ฑํ๋ค. ./src/context.jsimport { createContext, useContext, useState } from 'react';// (1) Context ์์ฑํ๊ธฐco..
2 2024.09.11 -
- [React.js] react-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌreact-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๊ฐ๋จํ๊ฒ ํ ์คํธ(Toast) ๋ฉ์์ง๋ฅผ ๋์์ผํ ๋ @react-toastify@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.@react-toastify@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. react-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ์ ๊ณตํ๋ ํ ์คํธ ๋ฉ์์ง(Notification)๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์คํ์ผ๊ณผ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ก ๊ฐ๋จํ๊ฒ ์๋ฆผ์ ๋์ธ ์ ์๋ค.๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ์ด ๊ฐํธํ๋ฉฐ, ๋ค์ํ ์ฌ์ฉ์ ์ ์ ์ต์ ์ ์ ๊ณตํ์ฌ ์๋ฆผ์ ์ํ๋ ๋๋ก ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น$ npm install react-toastify # yarn add react-toastify ์ฌ..
2024.09.10 -
- [React.js] uuid, nanoid ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (key)uuid, nanoid ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (key)๋ค์ด๊ฐ๋ฉฐ๋ค์๊ณผ ๊ฐ์ด @map@์ ์ด์ฉํ์ฌ ์์๋ฅผ ํ๋ํ๋์ฉ ํํํ ๊ฒฝ์ฐ @key@ ๊ฐ์ ์ง์ ํด์ผ ํ๋๋ฐ ์ด๋ค๊ฐ์ @key@ ๊ฐ์ผ๋ก ์ง์ ํด์ผํ ์ง ๋ชจ๋ฅผ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.์ด๋, @uuid@ ๋๋ @nanoid@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์ด ๊ณ ๋ฏผ์ ํด๊ฒฐํ ์ ์๋ค.import { data } from './data.js';export default const App = () => { return ( {data.map((item) => {item.content}} )} uuid ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ๋ @uuid@๋ Universally Unique Identifier ์ ์ฝ์๋ก, ์ ์ธ๊ณ์์ ๊ณ ์ ํ ๊ฐ์ ์์ฑํ ์ ์๋ ์๋ณ์์ด๋ค.@u..
2024.09.09 -
- [JavaScript] ์ ๊ฐ ์ฐ์ฐ์ (Spread Operator, ...)์ ๊ฐ ์ฐ์ฐ์ (Spread Operator, ...)๋ค์ด๊ฐ๋ฉฐ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)์์ ์ฌ์ฉํ ์ ์๋ ์ ๊ฐ ์ฐ์ฐ์(Spread Operator, @...@)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ๊ฐ ์ฐ์ฐ์(Spread Operator, @...@)๊ฐ๋ ๋ฐฐ์ด(Array)์ด๋ ๊ฐ์ฒด(Object)๋ฅผ ์ฝ๊ฒ ํ์ฅํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์๋ ๊ธฐ๋ฅ๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์ ํธ์ถ์์ ๋ค์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.๋ฐฐ์ด์ ๋ณํฉ & ๋ณต์ฌ๊ฐ์ฒด์ ๋ณํฉ & ๋ณต์ฌํจ์ ํธ์ถ ์ ์ธ์ ํ์ฅ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋, ์์ ๋ณต์ฌ(Shallow Copy)๊ฐ ์ด๋ฃจ์ด์ง๋ค.ES6(ECMAScript 2015)๋ถํฐ ์ฌ์ฉํ ์ ์๋ค. ์์ ๋ณต์ฌ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์ต์์ ์์ค๋ง ๋ณต์ฌํ๋ค. (์ค์ฒฉ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์๋ณธ ๋ฐ์ดํฐ์ ๋ํ '์ฐธ์กฐ'๋ฅผ ์ ์งํ๋ค.) ๋ฐ๋ผ์ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ..
2024.08.27 -
- [React.js] ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง (JSX, React.createElement)์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง (JSX, React.createElement)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณธ๋ค. ์ปดํฌ๋ํธ ์์ฑ ๋ฐฉ๋ฒโ ํจ์ํ ์ปดํฌ๋ํธfunction Greeting() { return ( hello world );} ํจ์ํ ์ปดํฌ๋ํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ก ์ ์๋๋ฉฐ, JSX(JavaScript XML) ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ UI๋ฅผ ๋ฐํํ๋ค.@@์ @@ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ์ ์ํ๋ค.JSX๋ Babel ๊ฐ์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด @React.createElement@ ํธ์ถ๋ก ๋ณํ๋๋ค.์ฝ๋๊ฐ ๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋ HTML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. โก @React.createElement@imp..
2024.08.26 -
- [React.js] Create React App๊ณผ ViteCreate React App๊ณผ Vite๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ์ค์ ํ๊ณ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ฃผ๋ ํด์ธ Create React App๊ณผ Vite์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.Create React App(CRA)๊ฐ๋ ํ์ด์ค๋ถ(๋ฉํ)์์ ๊ฐ๋ฐํ ๋ฆฌ์กํธ ๊ณต์ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๋๊ตฌ๋ฆฌ์กํธ๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ํ์ํ ๋ชจ๋ ์ค์ ์ ์๋์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ ์ฝ๋ ์์ฑ์ ์ง์คํ ์ ์๋ค. ํน์งZero Configuration๋ณต์กํ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.ํ๋ก์ ํธ ์ค์ , ๋น๋ ๋๊ตฌ(์นํฉ ๋ฑ), Babel ์ค์ ๋ฑ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ์ฌ, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํ ํ์๊ฐ ์๋ค.Out-of-the-box๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์กํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ถ๊ณ ์๋ค.ESLint, Jest, Service Work..
2024.08.26 -
- [React.js] ํจ์ํ ์ ๋ฐ์ดํธ์ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธํจ์ํ ์ ๋ฐ์ดํธ์ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ํ(Status)๋ฅผ ์ ๋ฐ์ดํธํ ๋, ํจ์ํ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ๊ณผ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํจ์ํ ์ ๋ฐ์ดํธ(Functional Update)setPosts((prevPosts) => [postData, ...prevPosts])์ํ ์ ๋ฐ์ดํธ๊ฐ ์ด์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค.์ฅ์ ์ค๋ช ์์ ์ฑ- ๋ฆฌ์กํธ์ ์ํ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๊ฐ ๋์์ ๋ฐ์ํ ์ ์๋ค.- ์ด๋, ํจ์ํ ์ ๋ฐ์ดํธ ํํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ ์ํ ๊ฐ์ ๋ณด์ฅํ ์ ์๋ค.- @prevPosts@๋ ํญ์ ํ์ฌ ์ํ์ ์ต์ ์ค๋ ์ท์ ์ ๊ณตํ๋ค.๋์์ฑ ์ฒ๋ฆฌ- ์ํ ์ ๋ฐ์ด..
2024.08.22 -
- [React.js] ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ ์ ๋ฆฌ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ ์ ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ์กฐ๊ฑด๋ถ ๋ ๋๋ง(Conditional Rendering)๊ฐ๋ ํน์ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ UI์ ์ผ๋ถ๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์จ๊ธฐ๋ ๋ฐฉ๋ฒ ๋ฐฉ๋ฒโ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ / ์ผํญ ์ฐ์ฐ์(? :)์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ , ๊ฑฐ์ง์ผ ๋๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ์๋ฌด ๊ฒ๋ ๋ ๋๋งํ์ง ์๊ฒ ํ ์ ์๋ค.function Example({ isVisible }) { return ( {isVisible ? ์ด ๋ด์ฉ์ ๋ณด์ ๋๋ค! : ์ด ๋ด์ฉ์ ๋ณด์ด์ง ์์ต๋๋ค!} );} โก ๋ ผ๋ฆฌ ์ฐ์ฐ์(&&)๋ ผ๋ฆฌ @&&@ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ๋ ๋๋งํ๋๋ก ํ ์ ์๋ค.์กฐ๊ฑด..
2024.08.22 -
- [React.js] Compound Component ํจํดCompound Component ํจํด๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด(Design Pattern) ์ค ํ๋์ธ Compound Component ํจํด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Compound Component ํจํด๊ฐ๋ ์๋ก ๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ ๋ถ๋ชจ ์ปดํฌ๋ํธ ์์ ์บก์ํํ๋ ๋ฐฉ์์ปดํ์ด๋ ์ปดํฌ๋ํธ์ ์ฃผ์ ์์ด๋์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ์์ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ ์์ ์ปดํฌ๋ํธ ์์์ ์กฐํฉํ์ฌ ๋ ๋ณต์กํ UI๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. Coompound Component ํจํด์ ์ ์ฉ ์ : @ - @ Option 1 Option 2 Option 3 Option 4 ์ฅ์ ๋์ผํ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฌ์ฌ์ฉํ ์ ์๋ค.์ปดํฌ๋ํธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณ..
2024.08.12 -
- [React.js] Framer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌFramer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐFramer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Framer Motion๊ฐ๋ ์ธํฐ๋ํฐ๋ธ ์น ์ ๋๋ฉ์ด์ ๊ณผ UI ๋์์ธ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฆฌ์กํธ ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์ ๋๋ฉ์ด์ ์ ๋ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์๊ฒ ๋์์ค๋ค.๊ฐ๋ ฅํ API๋ฅผ ์ ๊ณตํ์ฌ ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ๋ ์์ฐ์ฑ์ ๋์ฌ์ค๋ค. ์ค์น$ npm install framer-motion # yarn add framer-motion ์ฃผ์ ๊ธฐ๋ฅ๊ธฐ๋ณธ์ ์ธ ๋ชจ์ ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.์์น, ํฌ๊ธฐ, ๋ถํฌ๋ช ๋ ๋ฑ์ ์์ฑ์ ์ ๋๋ฉ์ด์ ํํ ์ ์๋ค.๋๋๊ทธ์ ๊ฐ์ ์ธํฐ๋์ ์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.์๋ฅผ..
2024.08.11 -
- [Next.js] ์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)๋ค์ด๊ฐ๋ฉฐ์ฌ์ ๋ ๋๋ง ๋ฐฉ๋ฒ์ธ ์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ์ ์์ฑ(Static Generation)๊ฐ๋ ์น ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ HTML ํ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์น ์ฌ์ดํธ์ ๋น๋ ๋จ๊ณ์์ ๋ชจ๋ ํ์ด์ง๊ฐ ์ฌ์ ์ ๋ ๋๋ง๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ์๋ฒ์์ ๋ฏธ๋ฆฌ ์์ฑ๋ HTML ํ์ผ์ ์ฆ์ ์ ๊ณตํ๋ ๋ฐฉ์๋น ๋ฅธ ๋ก๋ฉ ์๋์ ์๋ฒ ๋ถํ ๊ฐ์๋ฅผ ์ํด ์ฌ์ฉSSG(Static Site Generation)์ด๋ผ๊ณ ๋ ํ๋ค. ์ฅ์ ํ์ด์ง๊ฐ ๋ฏธ๋ฆฌ ์์ฑ๋์ด ์์ผ๋ฏ๋ก, ์ฌ์ฉ์๋ ๋น ๋ฅด๊ฒ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค. (๋น ๋ฅธ ํ์ด์ง ๋ก๋ฉ)์์ฒญ..
2024.08.08 -
- [Next.js] ๋ฉํ๋ฐ์ดํฐ(Metadata) ์ถ๊ฐํ๊ธฐ๋ฉํ๋ฐ์ดํฐ(Metadata) ์ถ๊ฐํ๊ธฐ๋ค์ด๊ฐ๋ฉฐNext.js์์ ์ปดํฌ๋ํธ์ ๋ฉํ๋ฐ์ดํฐ(Metadata)๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฉํ๋ฐ์ดํฐ(Metadata)์นํ์ด์ง์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ฃผ๋ก HTML ๋ฌธ์์ @@ ํ๊ทธ ์์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฒ์ ์์ง ์ต์ ํ(SEO), ์์ ๋ฏธ๋์ด ๊ณต์ , ๋ธ๋ผ์ฐ์ ์ค์ ๋ฑ ์ฌ๋ฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐ์ ์ ํ์ด์ง(Static Page)์ ๋์ ํ์ด์ง(Dynamic Page)์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค. ์ ์ ํ์ด์ง๋ฐฉ๋ฒํ์ด์ง๋ ๋ ์ด์์ ํ์ผ์ @metadata@๋ผ๋ ์ด๋ฆ์ ์์๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐฉ์์ ํตํด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ์ ์๋ค.export const metadata = { title: 'All Meals', descriptio..
2024.08.07 -
- [React.js] Suspense ์ปดํฌ๋ํธSuspense ์ปดํฌ๋ํธ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฌ์ฉ๋๋ @Suspense@ ์ปดํฌ๋ํธ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Suspense ์ปดํฌ๋ํธ๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋์ ๋ ๊ธฐ๋ฅ์ฃผ๋ก ๋ฐ์ดํฐ ๋ก๋ฉ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐ์ดํฐ๊ฐ ๋ก๋ฉ๋ ๋ ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ ์คํผ๋(Spinner)๋ ๋์ฒด ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. ์ฌ์ฉ๋ฒ@Suspense@ ์ปดํฌ๋ํธ๋ ์ฃผ๋ก ๋ค๋ฅธ ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.@Suspense@๋ @fallback@ ์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ํตํด ๋ก๋ฉ ์ค์ ๋ณด์ฌ์ค ์ปจํ ์ธ ๋ฅผ ์ง์ ํ ์ ์๋ค.Loading...}> ์ฌ์ฉ ์ ์ฃผ์ํ ์ @Suspense@๋ ํด๋ผ์ด์ธํธ ์ธก ๋ ๋๋ง์์ ๋์ํ๋ค.์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์..
2024.08.06 -
- [React.js] ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates) (React Query)๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates) (React Query)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ์ฟผ๋ฆฌ(React Query)์์ ์ฌ์ฉ๋๋ ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates)์ ๋ํ์ฌ ์ ๋ฆฌํด๋ณธ๋ค. ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updating)๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ค์ ์๋ฒ์ ๋ฐ์๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ UI์ ๋ฐ์ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ํฅ์์ํค๋ ๊ธฐ๋ฒ์ฌ์ฉ์๊ฐ ์๋ฒ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๊ฒ ํด์ค๋ค. ์ฃผ์ ๋จ๊ณโ ๋ณ๊ฒฝ ์ ์ํ ์ ์ฅ๋๊ด์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ธฐ ์ ์, ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ค.์ด ์์ ์ ์๋ฒ ์์ฒญ์ด ์คํจํ์ ๊ฒฝ์ฐ ์๋ ์ํ๋ก ๋กค๋ฐฑ(Rollback)ํ๊ธฐ ์ํด ํ์ํ๋ค. โก ๋๊ด์ ์ํ ์ ๋ฐ์ดํธ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ @queryClient.setQu..
2024.07.10 -
- [React.js] ๋ฆฌ์กํธ ์ฟผ๋ฆฌ(Tanstack Query, React Query)๋ฆฌ์กํธ ์ฟผ๋ฆฌ(Tanstack Query, React Query)๋ค์ด๊ฐ๋ฉฐReact Query๋ผ๊ณ ๋ถ๋ฆฐ Tanstack Query ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.Tanstack Query(React Query)๊ฐ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ ์ํ(๋ฐ์ดํฐ)๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์กฐ์ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌReact Query๊ฐ 2022๋ ์ด์ Tanstack Query๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์๋ค.React Query๊ฐ ํฌํจ๋ Tanstack ์ํ๊ณ๋ฅผ ํ์ฅํ๊ณ , ๋ค์ํ ํ๋ ์์ํฌ์ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ฉ ๋ฐ์ดํฐ ํ์นญ ๋ฐ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชฉํ๋ก ํ๊ธฐ ์ํด์ ์๋ค๊ณ ํ๋ค.Tanstack Query๋ ์ด์ React๋ฟ๋ง ์๋๋ผ Vue, Svelte, Solid์ ๊ฐ์ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ๋ํ ์ง์๋ ํฌํจํ๊ณ ..
2024.07.09 -
- [React.js] ์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ง์ฐ ๋ก๋ฉ(Lazy Loading)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ฝ๋ ์ต์ ํ ์์ ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ ์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ ํ์ฉํ ์ ์๋ค.์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ด ๋ฌด์์ธ์ง ๊ฐ๋จํ ์ ๋ฆฌํด๋ณธ๋ค. ์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ฐ๋ ํ์ํ ์์ ์ ํน์ ์ปดํฌ๋ํธ๋ ๋ชจ๋์ ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋ก๋ฉ ์ ๋ถํ์ํ ์ฝ๋๊ฐ ๋ก๋๋์ง ์์ผ๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ@React.lazy@์ @Suspense@๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก @import@ํ๊ณ ๋ก๋ฉ์ด ์๋ฃ๋ ๋๊น์ง ๋์ฒด UI(fallback)๋ฅผ ํ์ํ ์ ์๋ค. โ ์ปดํฌ๋ํธ ๋์ im..
2024.07.08 -
- [React.js] useSearchParams ํ (React Router)useSearchParams ํ (React Router)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @useSearchParams@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useSearchParams๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)๋ฅผ ์ฌ์ฉํ์ฌ URL์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฝ๊ณ ์ค์ ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ด ํ ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ URL์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ฝ๊ฒ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ค.React Router v6์์ ๋์ ๋์๊ณ , ๊ธฐ์กด์ @useLocation@๊ณผ @useHistory@ ํ ์ ๊ฒฐํฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฌ์ฉ๋ฒimport React from 'react';import { useSearchParams } from 'react-router-dom';function MyComponent() { /..
2024.07.08 -
- [React.js] defer() (React Router)defer() (React Router)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @defer()@์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. defer()๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ ์ ์ ํ์ด์ง ์ผ๋ถ๋ฅผ ๋จผ์ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋๋จธ์ง ๋ถ๋ถ์ ๋ ๋๋งํ ์ ์๋๋ก ํด์ค๋ค.ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํค๊ณ , ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ ์ค๋ค. ์ฃผ์ ํน์ง๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ@defer@๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ์ผ๋ถ ํ์ด์ง ์ฝํ ์ธ ๋ฅผ ๋จผ์ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋๋จธ์ง ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ค.๋น ๋ฅธ ํ์ด์ง ๋ ๋๋ง๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ํ์ด์ง ์ผ๋ถ๋ฅผ ์ฆ์ ๋ ๋๋งํ ์ ์์ด ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ..
2024.07.07 -
- [React.js] useFetcher ํ (React Router)useFetcher ํ (React Router)๋ค์ด๊ฐ๋ฌ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @useFetcher()@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useFetcher๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ํ์ด์ง ์ ํ ์์ด ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ์ก์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ฃผ๋ ํ (Hook)์ฃผ๋ก ํผ ์ ์ถ์ด๋ ๋ฐ์ดํฐ ํ์นญ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ๊ณ , ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ ํ ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค. ์ฃผ์ ๊ธฐ๋ฅ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ก์ ํธ๋ฆฌ๊ฑฐ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๋ค.ํ์ด์ง ์ ํ ์์.ํ์ด์ง ์ ํ ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ถํ ์ ์์ผ๋ฏ๋ก, ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ณด๋ค ๋งค๋๋ฝ๋ค.์ํ ๊ด๋ฆฌํ์ฌ ๋ก๋ฉ ์ํ์ ๋ก๋ฉ ์๋ฃ ํ ๋ฐ์ดํฐ๋ฅผ..
2024.07.07 -
- [React.js] useRouterError ํ (React Router)useRouterError ํ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์ @useRouterError@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useRouterError ํ ๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(@react-router-dom@)์์ ์ ๊ณตํ๋ ํ ๋ผ์ฐํธ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ ์๋ฌ๋ฅผ ์ก์์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.์ฃผ๋ก ์ค๋ฅ ๊ฒฝ๊ณ(Error Boundary)์ ํจ๊ป ์ฌ์ฉ๋์ด, ๋ผ์ฐํธ ๋ด์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ค๋ฅ ๊ฐ์ง: ๋ผ์ฐํธ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๋ค.์๋ฌ ํธ๋ค๋ง: ๊ฐ์ง๋ ์ค๋ฅ๋ฅผ ์ฌ์ฉ์ ์ ์ ์๋ฌ ๋ฉ์์ง๋ ์ปดํฌ๋ํธ๋ก ๋ ๋๋งํ ์ ์๋ค.์ค๋ฅ ์ ๋ณด ์ ๊ณต: ์ค๋ฅ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ์ค๋ฅ ๋ฉ์์ง, ์คํ ํธ๋ ์ด์ค ๋ฑ์ ํ์ฉํ ์ ์๋ค. ์ฌ์ฉ ์์ ์์ 1..
2024.07.05 -
- [React.js] React Router์ loader ์์ฑReact Router์ loader ์์ฑ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(@react-router-dom@)์ @loader@ ์์ฑ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. React Router์ @loader@ ์์ฑReact Router Version 6 ๋ถํฐ ์ฌ์ฉํ ์ ์๋ค.์ปดํฌ๋ํธ๊ฐ ๋๋๋ง๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.๋ก๋ ํจ์์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ํด๋น ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.๋ก๋๋ ํจ์๋ก ์ ์๋๋ฉฐ, ํด๋น ํจ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.๋ก๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด, ์ปดํฌ๋ํธ๊ฐ ์ด๊ธฐ ๋ก๋ฉ ์ํ๋ฅผ ํ์ํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ์ ์๋ค.๋ฐ๋ผ์ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค. ์์ ์ฝ๋import { RouterProvider, cre..
2024.07.03 -
- [React.js] ๋ผ์ฐํฐ ์ค์ ๋ฐฉ๋ฒ (React Router)๋ผ์ฐํฐ ์ค์ ๋ฐฉ๋ฒ (React Route)๋ค์ด๊ฐ๋ฉฐReact Router(@react-router-dom@)์ ์ด์ฉํ์ฌ ๋ผ์ฐํฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํจํค์ง ์ค์นํ๊ธฐ@react-router-dom@ ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ํฐ๋ฏธ๋์ ์๋ ๋ช ๋ น์ ์คํํ๋ค.$ npm install react-router-dom # yarn add react-router-dom ๋ฐฉ๋ฒ 1@createBrowserRouter@๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.import { createBrowserRouter, RouterProvider,} from "react-router-dom";import HomePage from "./pages/Home";import ProductsPage from "./pages/Products";co..
2024.07.02 -
- [React.js] ๋ฆฌ์กํธ์์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ฆฌ์กํธ์์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ฆฌ์กํธ(React)์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.๋ฆฌ์กํธ์์๋ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ1. ์ง์ญ ์ํ(Local State)๋ฆฌ์กํธ์ useState ํ ์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.์์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋จ์ผ ์ปดํฌ๋ํธ์์ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํฉํ๋ค.import React, { useState } from 'react';function Counter() { const [count, setCount] = useState(0); return ( You clicked {count} times setCount(count..
2024.06.30 -
- [React.js] <form> ์์์์ ์ ์ถ(Submit) ๋ฒํผ ์ฌ์ฉ ์ ๊ธฐ๋ณธ ๋์ ๋ง๋ ๋ฐฉ๋ฒ์์์์ ์ ์ถ(Submit) ๋ฒํผ ์ฌ์ฉ ์ ๊ธฐ๋ณธ ๋์ ๋ง๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ@@ ์์ ์์ @type@์ด @submit@์ธ ๋ฒํผ์ ๋๊ณ , ํด๋ฆญํ ๋, ํผ ์ ์ถ ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ค.ํด๋น ๋ฒํผ์ ํด๋ฆญํ ๋ ํผ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ์ ์ก๋๋ฉด์ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋๋๋ฐ, ์ด๊ฒ์ ํผ์ ๊ธฐ๋ณธ ๋์์ด๋ค. // ... ์ ์ถ ์ด๋ ํผ ์ ์ถ ํจ๊ณผ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๋ฐฉ๋ฒ 1 : @@ ์์์ @type@ ์์ฑ์ @button@์ผ๋ก ์ง์ ํ๊ธฐ@@ ์์์ @type@ ์์ฑ์ @submit@์ด ์๋ @button@์ผ๋ก ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.function handleSubmit() { console.log("Submitted!");} ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ 2 : @@ ์์์ @onClick@ ์ด๋ฒคํธ ํจ์์ @event...
2024.06.28