๋ชฉ๋ก๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (115)
let's get IT with DAVINA ๐ป
ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ css๋ก ๊ธฐ๋ณธ ํ์ ๋ค ์กํ๊ณ ๊ธฐ๋ฅ ๊ตฌํํด๋ณผ๋, ๋ฐฑ์ค๋ api๊ฐ ์์ฑ์ด ๋๋์๊ฑฐ๋ ๋ฏธ๋ฆฌ ๋ก์ปฌ์คํ ๋ฆฌ์ง์์ ํต์ test๋ฅผ ํด๋ณด๊ณ ์ถ์ ๋๊ฐ ์์๋ค.. terminal npm install json-server //์ฌ์ฉํ์ง ์๋ ํฌํธ๋ฒํธ๋ก ์ํ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ์์ฑ json-server --watch db.json --port 3002 db.json { "login" :[], "signup" : [] }
Redux - React์ ๋ฌด๊ดํ ์ํ๊ด๋ฆฌ์ React Redux - React & Redux ํตํฉ Redux Toolkit - Redux๋ฅผ ๋ณด๋ค ์์ํ๊ฒ ์ด์ฉํ๊ฒ ํด์ฃผ๋ ๋๊ตฌ Redux Toolkit ๋๋ ์ ํ์ด๋ฌ๋? ์ค์ ํ ๊ฒ ๋๋ฌด ๋ง์ต๋๋ค. ๋ฏธ๋ค์จ์ด ์ค์น๊ฐ ๋ณต์กํฉ๋๋ค. ๋ฐ๋ณต๋๋ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์ต๋๋ค. ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ถ๋ณ์ฑ ์ ์ง๊ฐ ๋๋ฌด ์ด๋ ต์ต๋๋ค. Redux Toolkit ์ฌ์ฉ๋ฒ npm install @reduxjs/toolkit npm install react-redux ์์ store์ด ๋ชจ์ด๋ฉด? → slice slice๋ค์ด ๋ชจ์ด๋ฉด? → ํฐ store configureStore() createStore๋ฅผ ๊ฐ์ธ์ ์ธ๋งํ ๊ธฐ๋ณธ๊ฐ๋ค๊ณผ ๋จ์ํ๋ ์ค์ ์ ์ ๊ณตํฉ๋๋ค. ๋ด๊ฐ ๋ง๋ ๋ฆฌ๋์ ์กฐ๊ฐ๋ค์ ์๋์ผ๋ก ..
๋ชจ๋ฌ์ฐฝ์ ๋์ฐ๋ฉด, ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ ๋ซ๊ธฐ ๋ฒํผ โ ์ ๋๋ ์ ๋๋ง ์ฐฝ์ ๋ซ๊ฑฐ๋ ํ๊ธฐ ์ด๋ฏธ์ง์ฒ๋ผ ํํธ ๋ฒํผ์ ๋๋ฅด๋ฉด ํํธ์ ์ํ๋ง ๋ณํ๊ฒ (์ด๋ฏธ์ง ์ ์ฒด๊ฐ ๋๋ฆฌ์ง ์๊ฒ) ํ๊ณ ์ถ์ ๋๊ฐ ์๋ค. ๋ชจ๋ฌ ์ปดํฌ๋ํธ์์ ์ต์์ ๋ถ๋ชจ element์ onClick ์ด๋ฒคํธ๋ก stopPropagation()ํจ์๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๋ฒํผ element์ onClick ์ด๋ฒคํธ๋ก ๋ซํ ์ ์๊ฒ ์ค์ ํด์ฃผ๋ฉด ๋! return ( {e.stopPropagation()}}> X . . . ); const handleLike = async (id, e) => { e.stopPropagation(); // ๋ก๊ทธ์ธ ์๋ ์, ๋จผ์ ์ก๊ณ ๋ก๊ทธ์ธ if (!isLogin) { dispatch(modalOpen()); return; } return ( ..
์ ๊ฐ? ํ๋ก์ ํธ์ ์ ์๋ ์คํฌ๋กค๋ง ๋ฐฉ์ง์ ๋ํด ์ฌ๋ฌ ๊ฒ์๊ณผ ์ง์ธ์๊ฒ ๋ฌผ์ด๋ณธ ๊ฒฐ๊ณผ.. ์ข ๋ ํจ์จ์ ์ด๊ณ ์ง์ ๋ถํ์ง ์์ ์ฝ๋๋ฅผ ์์๋๋ค. ๋ชจ๋ฌ์ฐฝ์ ๋์ ์ ๋, ์คํฌ๋กค ๋ฐฉ์ง๋ฅผ ํ๊ณ -> ๋ชจ๋ฌ์ฐฝ์ ๋ซ์ผ๋ฉด ๋ค์ ์คํฌ๋กค ํ์ฑํ๋ฅผ ์ํค๋ ค๋ฉด overflow:hidden ์์ฑ์ ์ด์ฉํ๋ฉด ๋๋ค! modal์ฐฝ์ ์ํ๋ฅผ useState๋ก ์ํ๊ฐ์ ์ง์ผ๋ณด๊ณ ๋ชจ๋ฌ์ฐฝ์ด ๋จ๋ฉด, scroll ์ํ๋ฅผ hidden์ผ๋ก ๋นํ์ฑํ์ํค๊ณ ๋ชจ๋ฌ์ฐฝ์ ๋ซ์ผ๋ฉด, hidden์ ๋ค์ ํ์ด์ฃผ๋ unset์์ฑ์ ์ค์ ์คํฌ๋กค์ ๋ค์ ํ์ฑํ์ํจ๋ค. const [modal, setModal] = useState(false); const handleModal = () => { if (modal === false) { setModal(true); documen..
ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ๋ชจ๋ฌ์ฐฝ์ ๋์ธ ๋, spacebar์ ๋๋ฅผ๋๋ง๋ค ์๊พธ ์คํฌ๋กค์ด ๋ฐ์ํ์ฌ ๋ถํธํด์ ๋ชจ๋ฌ์ฐฝ์ด ๋จ๋ฉด ์คํฌ๋กค ์์ฒด๊ฐ ์๋๊ฒ ๋ฐฉ์งํ๋๋ก ๊ตฌํํ๋ค. utils/useScrollPrevent.jsx ์ฌ๋ฌ ํ์ด์ง์ ์ฐ์ผ ์ ์๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก util์ ๋ฐ๋ก ๋นผ์ฃผ์ import { useEffect } from "react"; const useScrollPrevent = () => { useEffect(() => { document.body.style.cssText = ` position: fixed; top: -${window.scrollY}px; overflow-y: scroll; width: 100%;`; return () => { const scrollY = document.body.style.to..
import crypto from "crypto" ๐ซ Module “crypto” has no default export. (๊ฐ์ ธ์ค๊ธฐ ๋ถ๊ฐ๋ฅ) SOL 1. import * as crypto from "crypto"โ SOL 2. tsconfig.jsonํ์ผ๋ก ๊ฐ์ esModuleInterop์ true๋ก ์ค์ { "include": ["src"], //tsํ์ผ๋ค์ด ์ด๋์ ์์ด? ์ง์ผ๋ด "compilerOptions": { "outDir": "build", //ts->js๋ก ์ปดํ์ผ๋๊ฑด ์ด๋์๋ค ์ ์ฅํ ๊บผ์ผ? "target": "ES6", //js๋ก ์ปดํ์ผ๋ ๋ ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ ์ง ์ ํ ๊ฐ๋ฅ (ES6 ์ ค ์ถ์ฒ) "lib": ["ES6"], //๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ด ์๋ NodeJS์์ ๊ฐ๋ฐํ ๊ผฌ์ dom ใดใด "s..
1. package.json ์ด๊ธฐํ //terminal mkdir typechain code typechain //vsc์ด๋ฆฐ๋ค //typechain/ํตํฉterminal npm init-y - package.json package.jsonํ์ผ์ด ์์ฑ๋๋ฉด, "main": "index.js" ์์ ๊ณ , scripts ์์ test๋ถ๋ถ ์์ ๊ณ ์์ ใฑใฑ { "name": "typechain", "version": "1.0.0", "description": "", "scripts": { "build": "tsc", "dev": "nodemon --exec ts-node src/index.ts", //srcํด๋ ์์ index.tsํ์ผ์ ์ฝ๋งจ๋๋ค์ ์๋ ์คํ์์ผ์ค "start": "node build/index.js..
๋ค์ด๊ฐ๊ธฐ ์ ํ๋ ์๊ณ ๊ฐ์ +1 Static JS method์ ๋๋ค. method๋ฅผ ํธ์ถํ ๋, ์๋๋ new Hi์ ๊ฐ์ instance๋ฅผ ์๋ก ์์ฑํด์ hello()๋ฅผ ํธ์ถํด์ผํ๋๋ฐ static ์ ์ ๋ฉ์๋๋ฅผ ์ฐ๋ฉด, ๋ฐ๋ก class์์ method ํธ์ถ ๊ฐ๋ฅ! class Hi { constructor() { static hello() { return "hello"; } } } Hi.hello(); //ok to go Type VS Interface ๋ ๊ฐ์ ๊ณตํต ๋ชฉํ? object์ ๋ชจ์๊ณผ ํ์ ์ ์ค๋ช ํด์ค๋๋ค. Type์ ๊ธฐ๋ฅ Type (Object) Shape of object (๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋๊ฐ?)๋ฅผ ์ ์ ์์ต๋๋ค. Property Name์ ์ ์ ์์ต๋๋ค. -> nickname, ag..