ํ์ฌ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ bottom-sheet๊ฐ ์์ด ์ด๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ๋ ๊ณต์ ํ๊ณ ์ถ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค๊ฒ ๋์๋ค! ๋ํ npm์ ์ฌ๋ ค ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์์ค ๋ฆฌ๋ทฐ, ๋ฒ๊ทธ ๋ฑ์ ๊ณต์ ๋ฐ๊ณ ์ถ์ ๋ง์๋ ์์๋ค. ๊ธ๋ก๋ฒํ๊ฒ ์ฌ์ฉ๋์์ผ๋ฉด ํด์ ์์ด๋ก ๋ฌธ์ํํด ๋์๋ค..! + ๋ฌธ์ ์ ์ด๋ ๊ฐ์ ์ฌํญ์ issue๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ์์ ํด ๋ณด๊ฒ ์ต๋๋ค ๐ช bottom-sheet ๊ด๋ จ ์์ค๋ ๊ธฐ์กด ํฌ์คํ
์์ ์์ ๊ณผ ํจ๊ป typescript๋ฅผ ์ ์ฉ์์ผฐ๋ค! @solb/bottom-sheet ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ bottom-sheet๋ก, ๋ชจ๋ฐ์ผ ์น์ด๋ ์ฑ์์๋ bottom-sheet ํํ๋ก ๋ํ๋๊ณ ์น์์๋ ๋ชจ๋ฌ ํํ๋ก ๋ํ๋๋ค. ์์ธํ Demo๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค (๐ Demo) ์ด ์ปดํฌ๋ํธ๋ web componen..
JavaScript
์นด์นด์ค, ๋ค์ด๋ฒ์ ์ ํ๊น์ง! ์์
๋ก๊ทธ์ธ ๊ตฌํ์ด ํ์ํ๋ค. ์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉฐ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๋ค ์์ฃผ๋ก ์์ฑํด ๋ณด๊ฒ ๋ค. ์์
๋ก๊ทธ์ธ ๊ตฌํ ๊ฐ 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...