๋ฐ˜์‘ํ˜•

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

[Next.js] url ๋กœ ํŠน์ • page์— ์ง์ ‘ ์ ‘๊ทผ ๋ง‰๋Š” ๋ฐฉ๋ฒ•

Intro Next.js๋กœ ๊ตฌํ˜„๋œ ํ”„๋กœ์ ํŠธ์—์„œ ํŠน์ • ํŽ˜์ด์ง€๋“ค์„ ์ˆจ๊ธฐ๋Š” ์š”์ฒญ์‚ฌํ•ญ์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต Next.js๋Š” pages๋ผ๋Š” ํด๋” ํ•˜์œ„์— ํŒŒ์ผ ํ˜น์€ ํด๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ/ํด๋”๋ฅผ ์ž๋™์œผ๋กœ ๋ผ์šฐํŒ… ํ•ด์ค๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋‹จ์ˆœํ•˜๊ฒŒ NavBar ๋„ค๋น„๋ฐ”์— ์žˆ๋Š” ํŠน์ • link tag ๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ, url๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€ ์ง์ ‘ ์ ‘๊ทผ์‹œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. How to do Next.js์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, Next.js๋Š” Redirects๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๊ธฐ๋Šฅ์€ Next.js ํ”„๋กœ์ ํŠธ ํด๋” root์— ์žˆ๋Š” next.config.js ํŒŒ์ผ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Redirects Redirects allow you to redirect an incoming request path ..

Framework/Next.js 2022.10.03

[React] React.FC ์˜ ์˜๋ฏธ์™€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ 

Intro React.FC์˜ ์˜๋ฏธ์™€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. type Props = { }; const TestComponent: React.FC = () => { return ( TestComponent ); }; export default TestComponent; ํ˜„์žฌ React typescript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. FC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ์ด์œ  ํ•˜์ง€๋งŒ ๐Ÿคจ React typescript๋Š” ๊ทธ๋‹ค์ง€ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” props์ด ์•”์‹œ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. children์„ ์•”์‹œ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ„ด์„ ์ด์šฉํ•  ๋•Œ ๋” ๋ถˆํŽธํ•ฉ..

Framework/React 2022.10.02

[React] innerHTML & ๋™์ ์œผ๋กœ HTML ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

Intro react ์—์„œ ๋™์ ์œผ๋กœ HTML ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ•œ ์˜ˆ์‹œ๋กœ "message" : "No: 1, 2\nHello World!" ํ•ด๋‹น text ์—์„œ \n ๋ฅผ ์‹ค์ œ ํƒœ๊ทธ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. import "./App.css"; function App() { const message = "No: 1, 2\nHello World!"; return ( {message} ); } export default App; ํ˜„์žฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. How to react ์—์„œ๋Š” ํ…์ŠคํŠธ๋กœ ๋œ HTML ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” react์˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. dangerouslySetInnerHTML={{ __html: htmlCode }} ..

Framework/React 2022.10.02

[JavaScript] ํ•œ๋‹ฌ ์ „/ํ›„ ๋‚ ์งœ ๊ตฌํ•˜๊ธฐ

Intro JavaScript ์—์„œ ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ฌ ์ „/ํ›„ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. How to solve the problem let now = new Date();// ํ˜„์žฌ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ console.log("ํ˜„์žฌ : ", now); // ํ˜„์žฌ : Fri Sep 30 2022 11:05:32 GMT+0900 (ํ•œ๊ตญ ํ‘œ์ค€์‹œ) let oneMonthAgo = new Date(now.setMonth(now.getMonth() - 1));// ํ•œ๋‹ฌ ์ „ console.log("ํ•œ๋‹ฌ ์ „ : ", oneMonthAgo); // ํ•œ๋‹ฌ ์ „ : Tue Aug 30 2022 11:05:32 GMT+0900 (ํ•œ๊ตญ ํ‘œ์ค€์‹œ) let now = new Date();// ํ˜„์žฌ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„..

[JavaScript] ํŠน์ • ๋ฌธ์ž ์ „๊นŒ์ง€ ๋ฌธ์ž์—ด ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ• (substring ์ด์šฉ)

Intro ํŠน์ • ๋ฌธ์ž ์ „๊นŒ์ง€ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. "message" : "No: 1, 2\nHello World!" ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ๊ธฐ์กด์—๋Š” message์— ํ•ด๋‹นํ•˜๋Š” value (string) ๊ฐ’์„ ํ™”๋ฉด์— ๊ทธ๋Œ€๋กœ ํ‘œ์ถœํ•˜์˜€์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์œ„ ๋ฌธ์ž์—ด์—์„œ \n ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ๋‹จ์ˆœํ•˜๊ฒŒ No: 1, 2 ๋งŒ ํ‘œ์‹œ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”? How to solve the problem javascript์˜ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ substring() ์™€ indexOf()๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. indexOf()๋กœ index 8์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์ตœ์ข…์ ์œผ๋กœ substring(0, 8) ์ด ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์ž์—ด์—์„œ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ 8์ „๊นŒ์ง€..

[React] Warning: validateDOMNesting(...): <div> cannot appear as a child of <tbody> ์˜ค๋ฅ˜

Intro ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ map ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ table๋ฅผ ๋งŒ๋“ค๋˜ ๋„์ค‘ ๋‹ค์Œ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. Warning: validateDOMNesting(...): cannot appear as a child of test test test test test test {props.map((item, index) => { return ( {item} {item} {item} {item} {item} {item} ); })} ์ œ๊ฐ€ ๋ดค์„ ๋•Œ๋Š” ๋ถ„๋ช… ๊ฐ ์ž์‹์— index ๋ผ๋Š” key ๊ฐ’์„ ๋ถ€์—ฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ์š”.. Why? ํ•˜์ง€๋งŒ..์•Œ๊ณ ๋ณด๋‹ˆ ์›์ธ์€ ๋ฐ”๋กœ ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.. key ๊ฐ’์€ root component์— ์ ์šฉ ๋˜๋Š” ๊ฒƒ์ด ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ํ•˜์ง€๋งŒ ์ €๋Š” OtherComponent ๋ฅผ ํ•จ๊ป˜ ์ž‘์„ฑ..

Framework/React 2022.10.01

[React ์™„๋ฒฝ ๊ฐ€์ด๋“œ] section 9 : ํ”„๋ž˜๊ทธ๋จผํŠธ ์ž‘์—…, Portals & "Refs"

์ด ๊ธ€์€ udemy์˜ React ์™„๋ฒฝ ๊ฐ€์ด๋“œ with Redux, Next.js, TypeScript ๊ฐ•์ขŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. 108. ๋ชจ๋“ˆ ์†Œ๊ฐœ JSX Limitations & Fragments Getting a Cleaner DOM with Portals Working with Refs 109. JSX ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ƒ์ˆ˜์— ์ €์žฅํ•˜๋Š” ๊ฐ’์€ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค. 1. div tag ์‚ฌ์šฉํ•˜๊ธฐ return ( {error && ( )} Username Age (Years) Add User 2. ๋„ค์ดํ‹ฐ๋ธŒ JS array ์‚ฌ์šฉํ•˜๊ธฐ return [ error && ( ), Username Age (Years) Add User , ]; → ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฆฌ์•กํŠธ JSX ์š”..

[React ์™„๋ฒฝ ๊ฐ€์ด๋“œ] section 8 : ์—ฐ์Šต ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ

์ด ๊ธ€์€ udemy์˜ React ์™„๋ฒฝ ๊ฐ€์ด๋“œ with Redux, Next.js, TypeScript ๊ฐ•์ขŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. 97. ๋ชจ๋“ˆ ์†Œ๊ฐœ ์—ฐ์Šต ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ 98. "์‚ฌ์šฉ์ž" ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ Technically, the React import is not required in all React projects as you learned. But you're never wrong with adding it. import React from "react"; 99. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ "์นด๋“œ" ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋‘ ๊ฐœ์˜ css ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• import React from "react"; import classes from "./Card.module.css"; const Card = ..

[React ์™„๋ฒฝ ๊ฐ€์ด๋“œ] section 7 : ๋ฆฌ์•กํŠธ ์•ฑ ๋””๋ฒ„๊น… ํ•˜๊ธฐ

์ด ๊ธ€์€ udemy์˜ React ์™„๋ฒฝ ๊ฐ€์ด๋“œ with Redux, Next.js, TypeScript ๊ฐ•์ขŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. 91. ๋ชจ๋“ˆ ์†Œ๊ฐœ Debugging React Apps Finding & Fixing Errors Understanding Error Messages Debugging & Analyzing React Apps Using the React DevTools 92. ๋ฆฌ์•กํŠธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ดํ•ดํ•˜๊ธฐ ์Šค์Šค๋กœ ์˜ค๋ฅ˜๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ , ์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๊ทธ ์ค„์ด๋‚˜ ํŒŒ์ผ์„ ์‚ดํŽด๋ด๋ผ. ๊ทธ๋Ÿฌ๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๋“ค์€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค! Failed to compile. ./src/App.js SyntaxError: /Users/yuri/workpla..

๋ฐ˜์‘ํ˜•