๋ฐ˜์‘ํ˜•

๊ฐœ๋ฐœ ๐Ÿพ 62

nextjs _app.js useEffect์—์„œ ๋‘๋ฒˆ ํ˜ธ์ถœ ํ•˜๋Š” ๋ฌธ์ œ

์ฐธ๊ณ : https://dev.to/jahid6597/why-useeffect-is-running-twice-in-react-18c6 React18 ๋ฒ„์ „์ดํ›„ StrictMode์ผ๋•Œ useEffect ๊ฐ€ ๋‘๋ฒˆ์”ฉ ํ˜ธ์ถœ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, next.config.js ์—์„œ strictMode๋ฅผ ๋Œ ์ˆ˜ ์žˆ๋‹ค. // next.config.js const nextConfig = { reactStrictMode: false, }

๊ฐœ์ธ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๊นŒ์ง€ ์™„๋ฃŒ ํ›„๊ธฐ

์›น ๊ฐœ๋ฐœ์ž๋กœ์จ ํšŒ์‚ฌ์—์„œ ์ผํ•˜๋Š” ๊ฒƒ๋„ ์ฆ๊ฒ์ง€๋งŒ(์ •๋ง?!) ๊ฐœ์ธ์ ์œผ๋กœ ๋ˆ, ์ŠคํŽ™, ์„œ๋น„์Šค๋ฅผ ํ•˜๋‚˜๋„ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์˜ค๋กœ์ง€ ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์„ ์žฌ๋ฏธ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์š•์‹ฌ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹œ์ž‘ํ•œ "์กฐํ† ๋ผ์•„์ผ€์ด๋“œ ํ”„๋กœ์ ํŠธ". ๐Ÿฐ ์ œ๋ชฉ์ฒ˜๋Ÿผ ์žฌ๋ฏธ์™€ ์ฆ๊ฑฐ์›€๋งŒ ์กด์žฌํ•˜๋Š” ์•„์ผ€์ด๋“œ ์ปจ์…‰์ž…๋‹ˆ๋‹ค. ์šฐ์„  1์ฐจ๋กœ ๋งŒ๋“  ์„œ๋น„์Šค๋Š” ๊ฒŒ์ž„2๊ฐœ์™€ ๋žœ๋ค์„ ์†Œ์žฌ๋กœํ•œ ์„œ๋น„์Šค 1๊ฐœ ์ž…๋‹ˆ๋‹ค. React๋กœ ๊ฐœ๋ฐœ์„ ํ• ์ง€, ๊ทธ๋ƒฅ javascript๋กœ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋Š”๋ฐ, ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์„œ๋น„์Šค๋“ค์€ ๋„ˆ๋ฌด ๋‹จ์ˆœํ•œ ๊ฒƒ๋“ค์ด์—ฌ์„œ react๋Š” ์˜ค๋ฒ„์ŠคํŽ™์ด๋ผ๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ํ˜น์—ฌ๋ผ๋„ ์ถ”ํ›„ ์„œ๋น„์Šค๊ฐ€ ์ปค์ง„๋‹ค๋ฉด, ๋ฆฌ์•กํŠธ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๋‹ˆ๊น์š”. ์ธ๋‹จ, ๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•ด ๋ณด๋Š”๊ฑธ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. 1. ๊ฐ•๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„ ์–ด๋ ธ์„์  ํ’€์–ด๋ดค์„ ๊ทธ ์œ ๋ช…ํ•œ ๊ฐ•๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์ž…..

์‹œ์Šคํ…œ scroll ์ปค์Šคํ…€ ํ•˜๊ธฐ

์›น์‚ฌ์ดํŠธ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์Šคํฌ๋กค๋ฐ”๋Š” ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ ์Šคํฌ๋กค์€ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์š”์ฆ˜์€ ์Šคํฌ๋กค์˜ ๋””์ž์ธ๋„ ๋งŽ์ด ๊ณ ๋ ค๋˜์„œ ๋‚˜์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์Šคํฌ๋กค์€ ์–ด๋–ป๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋ฉด๋ ๊นŒ์š”~? ::scroll ์ด๋ผ๋Š” ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์˜์™ธ๋กœ ๊ฐ„๋‹จ ํ•˜๋‹ต๋‹ˆ๋‹ค. .scroll { &::-webkit-scrollbar { width: 7px; height: 7px; } &::-webkit-scrollbar-track { background: transparent; } &::-webkit-scrollbar-thumb { background: #3c3c3c; border-radius: 45px; } &::-webkit-scrollbar-thu..

mac ์—์„œ rbenv install ์—๋Ÿฌ ํ•ด๊ฒฐ : ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

mac ์—์„œ react-native ํ™˜๊ฒฝ ์„ธํŒ… ๊ณผ์ •์—์„œ rbenv ๋ฅผ ์„ค์น˜ํ•ด์•ผํ•˜๋Š”๋ฐ, rbenv ๊นŒ์ง€ ์„ค์น˜ ์ดํ›„ bundler๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ๋‹ค. ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory. ๊ฒ€์ƒ‰ ๋์— ์ฐพ์€ ๋ฐฉ๋ฒ•์€ ์„ค์น˜์ดํ›„ .zshrc ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค. ใ…Ž vim ~/.zshrc // .zshrc ํŒŒ์ผ ์—ด๊ธฐ // ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ (์ถ”๊ฐ€: i, ์ €์žฅ+๋‹ซ๊ธฐ๋Š” : wq) [[ -d ~/.rbenv ]] && \ export PATH=${HOME}..

Axios ๋กœ ํŒŒ์ผ๊ณผ JSON ํŒŒ์ผ ๋™์‹œ์— ๋„˜๊ธฐ๊ธฐ

๋ณดํ†ต ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ• ๋•Œ Event ๋กœ ํŒŒ์ผ์„ ๋ฐ›์€ ํ›„ formData์— ๋‹ด์•„์„œ multipart ๋กœ ๋ณด๋‚ธ๋‹ค. const files = e.target.files; const formData = new FormData(); for (let file of files) formData.append('file', file); // ํ˜น์€ formData.append('file', file[0]); ๊ฐ„ํ˜น ํŒŒ์ผ ์ด์™ธ์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๋‚ผ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋•Œ์—๋„ formData๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค. ... const fileInfo = "user_type"; formData.append('type', fileInfo); ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ Object ํƒ€์ž…์„ ๋ณด๋‚ด์•ผํ•  ๋•Œ๋Š” ์–ด๋–จ๊นŒ? ๊ธฐ๋‚˜๊ธด ์‚ฝ์งˆ+๋„์›€ ๋์— ์ฐพ์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ..

node ๋ฒ„์ „์„ ์—ฌ๋Ÿฌ๊ฐœ ์“ฐ๊ณ ์‹ถ๋‹ค๋ฉด NVM์„ ์จ๋ณด์ž

Node.js๋Š” ๋‹ค๋“ค ์•Œ๋‹ค์‹œํŒŒ ์›น ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด์ฃ ? ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์€ NPM์„ ์„ค์น˜ํ•˜์—ฌ node์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด NVM์€ ๋ฌด์—‡์ผ๊นŒ์š”? NVM์€ Node Version Manager์˜ ์•ฝ์ž๋กœ, ์ปดํ“จํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Node.js๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. NVM์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํ“จํ„ฐ์˜ ๋‹ค๋ฅธ Node.js ๋ฒ„์ „ ๊ฐ„์— ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•˜๊ณ , ํŠน์ • ๋ฒ„์ „์„ ์„ค์น˜ ๋ฐ ์ œ๊ฑฐํ•˜๋ฉฐ, ๊ธ€๋กœ๋ฒŒ ๋ฐ ํ”„๋กœ์ ํŠธ๋ณ„ Node.js ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Node.js๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜ํ•˜๊ณ , ์‹œ์Šคํ…œ์˜ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์„œ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ ๋ฒ„..

yarn : ์ด ์‹œ์Šคํ…œ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ C:\Program Files\nodejs\yarn.ps1 ํŒŒ์ผ์„ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ ๋ฐœ์ƒ yarn ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. Window ๋‚ด์—์„œ ์ •์ฑ… ์„ค์ •์ด ์ œํ•œ๋˜์–ด์žˆ๋‹ค๋ฉด, yarn๊ฐ™์€ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฏฟ์„ ๋งŒํ•œ ์Šคํฌ๋ฆฝํŠธ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์„ ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํŠนํžˆ, .ps1xml, .psm1์„ ๋น„๋กฏํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ์‹คํ–‰์„ ์ œํ•œํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ํด๋ผ์ด์–ธํŠธ์šฉ์€ Restricted, ์„œ๋ฒ„์šฉ์€ RemoteSigned๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 2. ํ•ด๊ฒฐ ๋ฐฉ์•ˆ windows ์—์„œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ Restricted๋กœ ์ œํ•œ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด, yarn ์—์„œ ์ œ๊ณต ๋˜๋Š” ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋˜๋Š” ๋“ฏ ํ•˜๋‹ค. ์ฆ‰, Restricted ๋ฅผ RemotedSigned ๋กœ ๋ณ€๊ฒฝ ํ•ด์ค€๋‹ค๋ฉด yarn ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค..

React์—์„œ Router state ์‚ฌ์šฉ

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• router์—์„œ navigate๋กœ ์ด๋™์‹œ state์— ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ฐ’์„ ๋„˜๊ฒจ์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ parameter ๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋”ฐ๋กœ router url ๋’ค์— ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋˜๊ณ , url์— ๋„˜๊ธฐ๋Š” ๊ฐ’์ด ๋…ธ์ถœ ๋˜์ง€ ์•Š์•„์„œ ์ข‹์•˜๋‹ค. // ๋ณด๋‚ผ๋•Œ navigate(URL, {state: {id: "user1"}}) // ๋ฐ›์„๋•Œ import {useLocation} from "react-router"; const location = useLocation(); const id = location.state ? location.state.id : null; //

React amchart ๋ฅผ ํ•˜๋ฉด์„œ~!

๋ฒ„์ „์€ amchart5 ๋กœ ์ง„ํ–‰ ํ–ˆ๋‹ค. ๋งŽ์ด ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๋งŒํผ ๋ฏธ๋ฆฌ ์ •๋ฆฌ๋ฅผ ํ•ด๋‘์–ด์„œ ์ถ”ํ›„์—๋Š” ๊ฐ™์€๊ฑธ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์‹œ๊ฐ„๋‚ญ๋น„๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋‚˜์”ฉ ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ์ •๋ฆฌ๋ฅผ ํ•ด๋‘์–ด์•ผ ๊ฒ ๋‹ค. 1. axis์˜ x, y ์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ ์กฐ์ • ๋ฐ์ดํ„ฐ๋Š” 4๊ฐœ์ธ๋ฐ, ํ™”๋ฉด์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๋‹ค๋ณด๋‹ˆ amchart์—์„œ ์ž๋™์œผ๋กœ 2๊ฐœ๋งŒ label ์„ ํ‘œ์‹œํ•˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ x์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด ์žˆ์„๊บผ ๊ฐ™์•„์„œ ์—ด์‹ฌํžˆ width๋‚˜ min, max ๋ฅผ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, ์ •๋‹ต์€ render๋ฅผ ํ• ๋•Œ ์ตœ์†Œ grid distance ๊ฐ’์„ ์กฐ์ •ํ•ด์ฃผ๋ฉด ๋˜์—ˆ๋‹ค~ ๐Ÿ˜ฅ x๋ฟ๋งŒ์•„๋‹ˆ๋ผ y์˜ ๊ฐ’์„ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ y์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๋•Œ ๊ฐ™์€ ์˜ต์…˜๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค~ let xAxis = chart.xAxes.push( am5xy.Ca..

๋ฐ˜์‘ํ˜•