JavaScript

ํšŒ์‚ฌ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋˜ bottom-sheet๊ฐ€ ์žˆ์–ด ์ด๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ๋„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค! ๋˜ํ•œ npm์— ์˜ฌ๋ ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์†Œ์Šค ๋ฆฌ๋ทฐ, ๋ฒ„๊ทธ ๋“ฑ์„ ๊ณต์œ ๋ฐ›๊ณ  ์‹ถ์€ ๋งˆ์Œ๋„ ์žˆ์—ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉด ํ•ด์„œ ์˜์–ด๋กœ ๋ฌธ์„œํ™”ํ•ด ๋‘์—ˆ๋‹ค..! + ๋ฌธ์ œ์ ์ด๋‚˜ ๊ฐœ์„  ์‚ฌํ•ญ์€ issue๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ’ช bottom-sheet ๊ด€๋ จ ์†Œ์Šค๋Š” ๊ธฐ์กด ํฌ์ŠคํŒ…์—์„œ ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ typescript๋ฅผ ์ ์šฉ์‹œ์ผฐ๋‹ค! @solb/bottom-sheet ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  bottom-sheet๋กœ, ๋ชจ๋ฐ”์ผ ์›น์ด๋‚˜ ์•ฑ์—์„œ๋Š” bottom-sheet ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚˜๊ณ  ์›น์—์„œ๋Š” ๋ชจ๋‹ฌ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ž์„ธํ•œ Demo๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค (๐Ÿ‘‰ Demo) ์ด ์ปดํฌ๋„ŒํŠธ๋Š” web componen..
์นด์นด์˜ค, ๋„ค์ด๋ฒ„์™€ ์• ํ”Œ๊นŒ์ง€! ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ํ•„์š”ํ–ˆ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๊ฐ redirect uri์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ์†Œ์…œ ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณต ํ›„(์นด์นด์˜ค, ๋„ค์ด๋ฒ„ ๋“ฑ์—์„œ ๋กœ๊ทธ์ธ ํ›„) ๋‹ค์‹œ ์„œ๋น„์Šค ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜ฌ ํŽ˜์ด์ง€ ์œ„์น˜์ด๋‹ค. ์„ฑ๊ณต ํ›„ ๋ฐœ๊ธ‰๋œ ์ธ๊ฐ€์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์„œ redirect uri๋กœ ์ด๋™๋œ๋‹ค! ์ผ๋ฐ˜์ ์ธ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๊ณผ์ •์€ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ๋ถ„๋“ค์ด ์„ค๋ช…์„ ๋„ˆ๋ฌด ์ž˜ํ•ด์ฃผ์…”์„œ ๋‚ด๊ฐ€ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ›„ ์ด์ „ ํŽ˜์ด์ง€๋กœ ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด์ง€? ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ์ธ ์ „ ์ƒํƒœ์ผ ๊ฒฝ์šฐ! ๊ตฌ๋งคํ•˜๊ธฐ ํด๋ฆญ -> ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ -> ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™์ด ์•„๋‹ˆ๋ผ ๊ตฌ๋งคํ•˜๊ธฐ ํด๋ฆญ -> ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ -..
์ฒ˜์Œ ํ•ด๋ณด๋Š” ์—‘์…€ ๋‹ค์šด๋กœ๋“œ๋‹ค! ใ…Žใ…Ž ๋ฐฑ์•ค๋“œ์—์„œ ์—‘์…€ ํŒŒ์ผ์ด๋ž‘ ์—‘์…€ ํŒŒ์ผ๋ช…์„ response์— ๋‹ด์•„์„œ ๋ณด๋‚ด์ฃผ์‹ ๋‹ค๊ณ  ํ•ด์„œ ํ”„๋ก ํŠธ์—์„œ ๋ฐ›์•„์„œ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ด ๋ดค๋‹ค ๊ทธ์ „์—! Blob (Binary Large Object) ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ, ๋ฐฑ์•ค๋“œ์—์„œ ์—‘์…€ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ํ”„๋ก ํŠธ์— ๋ฐ›์„ ๋•Œ Blob๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค 1. api ํ˜ธ์ถœ axiosT.post('/test/excel-download', { ...form }, { responseType: 'blob', headers: { 'Content-Type': 'multipart/form-data', }, }, ) 2. ์—‘์…€ ๋‹ค์šด๋กœ๋“œ api๋กœ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ Blob ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ค€๋‹ค a ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ด์„œ href์— Blob ..
๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋ฐ”ํ…€์‹œํŠธ๋Š” 1. pc์—์„œ๋Š” ๋ชจ๋‹ฌํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚˜๊ณ  mobile์—์„œ๋Š” ์•„๋ž˜์—์„œ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๋Š” ๋ฐ”ํ…€์‹œํŠธ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚˜์•ผ ํ•œ๋‹ค. 2. ์™ธ๋ถ€์—์„œ ์—ด๊ณ  ๋‹ซ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 3. full(์ „์ฒด๊ฐ€ ์ฑ„์›Œ์ง€๋„๋ก)๋กœ ๋‹น๊ฒจ์งˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 4. ์ œ๋ชฉ๊ณผ ์ƒ๋‹จ์— ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์˜ ์—ฌ๋ถ€๋ฅผ attribute ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. + ๋ฏธ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์ž๋ฉด...! ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐ”ํ…€์‹œํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ดค๋‹ค ๋ฐ”ํ…€์‹œํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•ด(ํ•จ์ˆ˜๋กœ๋„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ํด๋ž˜์Šค๋กœ ํ•ด๋ณด๋ ค๋‹ค๊ฐ€...) Web components๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค ใ…Žใ…Ž ๋ฆฌ์•กํŠธ๋‚˜ ๋ทฐ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ Web components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค!! ..
์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ์—์„œ ์ƒ์„ธ ์ƒํ’ˆ์„ ๋ณธ ํ›„ ๋’ค๋กœ ๊ฐ€๊ธฐ ์‹œ ์›๋ž˜ ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ–ˆ๋‹ค๊ฐ€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์—ˆ๋‹ค. 1. scroll ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น scrollTop์˜ ๊ฐ’์„ session์— ์ €์žฅ ์—ฌ๊ธฐ์„œ scroll์ด ๋ฐœ์ƒ ์‹œ๋งˆ๋‹ค session์— ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ๋‚ญ๋น„์ด๋‹ค. throttle๋ฅผ ์ด์šฉํ•ด ๋งˆ์ง€๋ง‰ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ผ์ • ์‹œ๊ฐ„(400ms)์ด ์ง€๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋ง‰์•„์คฌ๋‹ค. document.addEventListener('scroll', () => { if (!timer) { timer = setTimeout(() => { timer = null; const scrollValue = document.documentElement.scrollTop; sessionStorage.setItem("ma..
slice ๋ฐฐ์—ด์˜ begin๋ถ€ํ„ฐ end๊นŒ์ง€์—(end๋Š” ๋ฏธํฌํ•จ) ๋Œ€ํ•œ ์–•์€ ๋ณต์‚ฌ๋ณธ์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์›๋ณธ์˜ ๋ฐฐ์—ด์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. arr.slice([begin[, end]]) begin : ์‹œ์ž‘์  ์ธ๋ฑ์Šค end : ์ข…๋ฃŒ ์ง€์  ์ธ๋ฑ์Šค (end ์ธ๋ฑ์Šค๋Š” ์ œ์™ธํ•˜๊ณ  ์ถ”์ถœ) ๋ฆฌํ„ด๊ฐ’ : ์ถ”์ถœํ•œ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด const animals = ['ant', 'bison', 'camel', 'duck', 'elephant']; console.log(animals.slice(2)); // ["camel", "duck", "elephant"] console.log(animals.slice(2, 4)); // ["camel", "duck"] console.log(animals.slice(1, 5)); ..
์ƒˆ๋กœ์šด ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์Šตํ•  ๊ฒธ ๊ธฐ์กด์˜ JavaScript๋กœ ๋งŒ๋“ค์—ˆ๋˜ ํ”„๋กœ์ ํŠธ๋ฅผ TypeScript๋กœ ๋ณ€๊ฒฝํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. TypeScript๋ฅผ ์„ค์น˜ํ•œ๋‹ค. yarn add typescript @types/node @types/react @types/react-dom @types/jest // ๋˜๋Š” npm install typescript @types/node @types/react @types/react-dom @types/jest ๊ทธ๋‹ค์Œ yarn install // ๋˜๋Š” npm install tsconfig.jsonํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. (ํ˜น์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด tsconfig.json์„ ์ตœ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.) ์•„๋ž˜ ์†Œ์Šค๋ฅผ tsconfig.json์— ์ถ”๊ฐ€ํ•ด..
๋‚˜์˜ ๊ฒฝ์šฐ answer์˜ ๊ธธ์ด๊ฐ€ 2์ž ์ดํ•˜๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ answer์˜ ๊ธธ์ด๊ฐ€ 3์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๋์— ๋ถ™์ด๊ธฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„์„ ํ–ˆ๋‹ค. while (answer.length
selectedIndex์—๋Š” ์„ ํƒ๋œ index๋“ค์˜ ๊ฐ’๋“ค์ด ๋“ค์–ด์žˆ๋‹ค. ์„ ํƒ๋œ index๋“ค์€ arr๋ฐฐ์—ด์—์„œ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. const arr= [ {id:1, name:'AAA'}, // 0 {id:2, name:'BBB'}, // 1 {id:3, name:'CCC'}, // 2 {id:4, name:'DDD'}, // 3 {id:5, name:'EEE'}, // 4 ] const selectedIndex= [0,2,3] 1. Object์˜ key๋“ค์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์ฃผ๊ณ  key๊ฐ’์ด ๋‹ค๋ฅธ ์•„์ด๋“ค๋งŒ ๋‹ด์•„์คฌ๋‹ค. 2. reduce๋กœ ๋‹ด์•„์ง„ key๋“ค์— ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. 3. 2๋ฒˆ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ์ค‘๊ฐ„์— ์‚ญ์ œ๋œ ๊ณณ์—๋Š” ๋นˆ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฏ€๋กœ null์ด ์•„๋‹Œ ๊ฐ’๋“ค๋งŒ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. const filteredData = Object...
์†”B
'JavaScript' ํƒœ๊ทธ์˜ ๊ธ€ ๋ชฉ๋ก