Next/link ์‚ฌ์šฉ ์‹œ mouseEnter ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ˜„์ƒ
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 1. 9. 10:16

๋ฌธ์ œ ์ƒํ™ฉ next/link๋ฅผ ์‚ฌ์šฉํ•œ GNB์˜ mouseEnter event๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์„œ ๋ฉ”์ธ ๋ฉ”๋‰ด์— ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์—ฌ๋„ subMenu๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์›์ธ GNB์—์„œ ์‚ฌ์šฉํ•˜๋Š” LinkContext์˜ SuperLink๋ฅผ next/link๋กœ ์ฒ˜๋ฆฌํ–ˆ๋Š”๋ฐ, next 12 version์—์„œ mouseHover ์ด๋ฒคํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. fix(Link): Do not ignore onMouseEnter prop with absolute href by ericmatthys · Pull Request #32012 · vercel/next.js Fixes #22733 Regardless of whether it's recommended that Link be used with e..

Next์˜ css์—์„œ ์“ด font asset์„ ๋นŒ๋“œ ์‹œ ์ œ๋Œ€๋กœ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 1. 3. 13:59

์š”์•ฝ css ๋‚ด๋ถ€์˜ font asset์„ ๋ฐ›์•„์˜ค๋Š” path๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค. ๋ฌธ์ œ css์— url๋กœ ์ •์˜ํ•ด ๋‘” font asset์ด ๊ฐœ๋ฐœ๋ชจ๋“œ(dev)์—์„œ๋Š” ์ž˜ ์ ์šฉ๋˜๋‹ค๊ฐ€ ์‹ค์„œ๋ฒ„(production)์—์„œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ์ด์Šˆ ์‹ค์ œ ๊ตฌํ˜„ /* style.css */ @font-face { font-family: spoqaSansNeo; font-weight: 700; src:url('/font/SpoqaHanSansNeo-Bold.ttf'); src: url('/font/SpoqaHanSansNeo-Bold.otf') format("opentype"), url('/font/SpoqaHanSansNeo-Bold.ttf') format("truetype"); } /* next.config..

[Next] _app.tsx์—์„œ url parmater ์‚ฌ์šฉ
์›น (WEB)/๊ณต๋ถ€ 2021. 11. 11. 22:18

์ƒํ™ฉ next.js์—์„œ๋Š” SSR์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— url์— ์žˆ๋Š” query๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•ด๊ฒฐ 1 next page์—์„œ getServerSideProps ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด query๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. const Page: NextPage = ({ params }) => { } export async function getServerSideProps (context) { const req = context.req; const params = new URLSearchParams(req._parsedUrl.query); return { props: { params } }; }โ€‹ ํ•ด๊ฒฐ 2 ํ•ด๊ฒฐ 1์˜ ๋ฐฉ๋ฒ•์œผ๋กœ page ๋‚ด๋ถ€์—์„œ๋Š” url parameter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ _app.tsx์™€ ๊ฐ™์ด ne..

CSS ์ ์šฉ๊ณผ์ • :: cascade, specificity, inheritance์— ๊ด€ํ•˜์—ฌ
์›น (WEB)/๊ณต๋ถ€ 2021. 10. 17. 10:42

์„ ํƒ์ž ์ถฉ๋Œ ์‹œ /*css*/ .special{ color: blue; } p{ color: red; } css๋Š” cascade์™€ specificity๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” rule์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•ด๋‹น rule์— ๋”ฐ๋ผ ์ถฉ๋Œ ์‹œ ๋” ๊ฐ•ํ•œ ์„ ํƒ์ž๊ฐ€ ์ ์šฉ๋œ๋‹ค. cascade rule : ๋’ค์— ์ ์šฉ๋œ ์Šคํƒ€์ผ์ด ์•ž์„  ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ด๋‹ค. specificity rule : ์š”์†Œ๋ฅผ ๋” ํŠน์ •ํ•˜๋Š” ์„ ํƒ์ž๊ฐ€ ์Šคํƒ€์ผ์„ ์ฐจ์ง€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ์˜ˆ์ œ์—์„œ specificty rule์— ์˜ํ•ด color๋Š” blue๊ฐ€ ๋œ๋‹ค. specificity specificity๋Š” 4๊ฐ€์ง€์˜ ๋‹จ์œ„๋กœ ์ธก์ •๋œ๋‹ค. Thousands : style ์†์„ฑ ๋‚ด์— ์ •์˜๋˜์–ด ์žˆ๋Š” style(inline style)์ผ ๊ฒฝ์šฐ Hundreds : ID selector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ..

Javascript ๊ธฐ๋ณธ :: declare (Typescript์—์„œ type ์—†์„ ๋•Œ)
์›น (WEB)/๊ณต๋ถ€ 2021. 9. 22. 14:15

๋งŒ์ผ Typescript๋กœ ๊ฐœ๋ฐœํ•˜๋˜ ์ค‘์— ์•„์ฃผ ์ž˜ ์ž‘์„ฑ๋œ JS ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€์„œ ์“ฐ๊ณ ์ž ํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ๋ชจ๋“ˆ ๋‚ด์˜ ํ•จ์ˆ˜๋Š” typescript๋กœ ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค. ๋ชจ๋“ˆ์ด ํ•ด๋‹น ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์—๋„ type์ด ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š์•„์„œ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ณ  ํ•ด์„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด declare ํ‚ค์›Œ๋“œ๋ฅผ ์จ์„œ ์ •์˜ํ•ด๋‘๋ฉด type์ด ์ธ์‹๋˜์–ด typescript compiler๊ฐ€ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. declare let module: any ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ "์ด๊ฑด ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค."๋ผ๊ณ  ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

CommonJS vs ES Modules
์›น (WEB)/๊ณต๋ถ€ 2021. 9. 22. 13:57

๋ฐฐ๊ฒฝ ํ•จ์ˆ˜๋“ค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ „์—ญ ์Šค์ฝ”ํ”„์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋‘”๋‹ค๋ฉด ๋‹ค๋ฅธ ๋‚ด๋ถ€ ์š”์†Œ์— ์˜ํ•ด ๋ง๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ์ˆœ์„œ๊ฐ€ ๋’ค์—‰์ผœ ์ „์—ญ ์Šค์ฝ”ํ”„์˜ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“ˆ์ด๋ผ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋ฉด ๊ฐ๊ฐ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ importํ•˜์—ฌ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ด๋””์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  import, export ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด๋ผ ํ•˜๋Š”๋ฐ ํ˜„์žฌ 2๊ฐ€์ง€์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ํ™œ๋ฐœํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. CommonJS ES modules ์ฐจ์ด์  ๊ธฐ์ดˆ ๋ฌธ๋ฒ• CommonJS const module = require('์–ด์ฉŒ๊ตฌ'); const { func } = require('์–ด์ฉŒ๊ตฌ'); module.exports = '์–ด์ฉŒ๊ตฌ'; // default export..

React context ์ฝ”๋“œ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ :: ๋ฆฌํŒฉํ† ๋ง
์›น (WEB)/๊ณต๋ถ€ 2021. 9. 21. 14:11

๋ฌธ์ œ ์ƒํ™ฉ React context ์‚ฌ์šฉ ์‹œ ๊ธฐ์กด ์ฝ”๋“œ ๊ตฌ์„ฑ์ด context ๋‚ด๋ถ€ ์š”์†Œ๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก ๋ณต์žกํ•ด์ ธ์„œ ๋ฆฌํŒฉํ† ๋งํ•˜๋ ค ํ•œ๋‹ค. ๊ธฐ์กด ๊ตฌํ˜„ // ๊ตฌ์„ฑ const UserContext = createContext({}); const SignInContext = createContextvoid>(()=>{}); export const UserContextProvider = ({ children }) => { const [user, setUser] = useState(); const signIn = () => {}; return ( {children} ); } export function useUserState() { const context = useContext(UserContext); return c..

๋”ฅ๋งํฌ, ์•ฑ๋งํฌ, ์œ ๋‹ˆ๋ฒ„์…œ๋งํฌ? :: ๋ฌด์กฐ๊ฑด ์•ฑ์œผ๋กœ ์—ฐ๋™๋˜๋Š” ์ƒํ™ฉ ํ•ด๊ฒฐ
์›น (WEB)/๊ณต๋ถ€ 2021. 9. 1. 21:12

๋ฌธ์ œ : ๋„๋ฉ”์ธ(B)์ด ๋ณธ ์„œ๋น„์Šค ๋„๋ฉ”์ธ(A)์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ๋‚˜์˜จ ์ƒํ™ฉ์—์„œ ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ๊ฐ€ ์˜ค๋™์ž‘. ์›๋ž˜ ์‚ฌ์šฉ์ž์˜ ์„ ํ˜ธ์— ๋”ฐ๋ผ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ ์ด๋™๋˜๊ฑฐ๋‚˜ ์•ฑ์„ ๋„์›Œ์•ผ ํ•˜๋Š”๋ฐ, ๋ฌด์กฐ๊ฑด ์•ฑ์œผ๋กœ ์—ฐ๋™๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ. ์›์ธ : ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ๋Š” ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ๋ฌด์กฐ๊ฑด ์•ฑ์œผ๋กœ ์—ฐ๋™๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•ด๊ฒฐ : ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ๋ฅผ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ์ฒ˜๋ฆฌ. ์•„๋‹ˆ๋ผ๋ฉด URI scheme์„ ์ด์šฉํ•˜์—ฌ ์—๋Ÿฌ ์‹œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹์œผ๋กœ ์ˆ˜์ •. ๋”ฅ๋งํฌ ๋”ฅ๋งํฌ๋Š” ํŠน์ • ์ฃผ์†Œ or ๊ฐ’์— ์˜ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ๋‚ด์˜ ํŠน์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ๋”ฅ๋งํฌ๋Š” 3๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. URI scheme : ์•ฑ์— URI scheme ๊ฐ’์„ ๋“ฑ๋กํ•˜๋Š” ๋”ฅ๋งํฌ ํŠน์ • scheme ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด (ex_ ohouse:/..