๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“  archive29

[Vue.js] ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์ด๋ชจ์ €๋ชจ Vue ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„œ ๐Ÿ“Œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ž€? ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๋Š” ์ƒํƒœ์™€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒํƒœ๊ฐ€ ์—†๊ณ  ์ธ์Šคํ„ด์Šคํ™” ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— this ์ปจํ…์ŠคํŠธ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋ Œ๋”๋ง๊ณผ ์—…๋ฐ์ดํŠธ ์‹œ ์„ฑ๋Šฅ ์ด์ ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉํ•˜๊ธฐ ์ดํ›„์— ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์ œ๋Š” Vue 2.x ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Œ์— ์œ ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค. Vue 3 ๋ถ€ํ„ฐ๋Š” functional: true ์†์„ฑ๋Œ€์‹  ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. template ์— functional ์†์„ฑ ์ง€์ •ํ•˜๊ธฐ SFC(single file component) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด template ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ @.. 2022. 2. 20.
[Vue.js] v-deep ์†์„ฑ์— ๋Œ€ํ•ด์„œ vue ์—์„œ v-deep ์ด๋ž€? ๐Ÿ“Œ ์ปดํฌ๋„ŒํŠธ์˜ scoped ์„ ์–ธ ์‚ฌ๋‚ด์—์„œ vuetify ๋กœ ๊ตฌ์„ฑ๋œ ์ผ๋ถ€ ํ™”๋ฉด์„ ๋‹ค๋ฃฐ ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ vuetify ์—์„œ ์ œ๊ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ ์ง€์ •์ด ๋œป๋Œ€๋กœ ๋˜์ง€ ์•Š์„ ๋•Œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด scoped ์„ ์–ธ ์—†์ด ์Šคํƒ€์ผ์„ ๋ฎ์–ด ์”Œ์šฐ๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ์ด ๊ฒฝ์šฐ ์ „์—ญ์ ์œผ๋กœ ํ•ด๋‹น ์Šคํƒ€์ผ์ด ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. // BAD ! // #2 // #3 sass ์™€ ๊ฐ™์€ ์ผ๋ถ€ CSS ์ „์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์—์„œ๋Š” >>> ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋‘๋ฒˆ์งธ๋‚˜ ์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ v-deep ์„ ์ด์šฉํ•ด์„œ v-html ์Šคํƒ€์ผ ๋‹ค๋ฃจ๊ธฐ v-html ๋กœ ์„ ์–ธ๋œ HTML ๋งˆํฌ์—…์€ scoped ์Šคํƒ€์ผ ์ ์šฉ์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค... 2022. 2. 20.
[Vue.js] mixin ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ Vue mixin ์‚ฌ์šฉ ์‹œ ์ถ”์ฒœํ•˜๋Š” ์ฝ”๋“œ ์Šคํƒ€์ผ ๐Ÿ“Œ mixin ์‚ฌ์šฉ ์‹œ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ์ค‘์š”ํ•œ ์ด์œ ? ํšŒ์‚ฌ์—์„œ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋ฉฐ ๊ฐ€์žฅ ํž˜๋“ค์—ˆ๋˜ ๋ถ€๋ถ„์€ mixin ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋‹ค๋ฅธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ์—†์ด mixin ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ ํ•ด๋‹น ์†Œ์Šค๊ฐ€ ์–ด๋Š ๋ชจ๋“ˆ์— ํฌํ•จ๋œ ๊ฒƒ์ธ์ง€ ํŒŒ์•…์ด ํž˜๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์— ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ ๋ถ„์„์ด ์šฉ์ดํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ mixin ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Vue ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์—์„œ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• const myAwesomeMixin = { methods: { $_myAwsomeMixin_update: function () { /** ... */ } } } Vue ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด mixin ์˜ ์‚ฌ์šฉ์ž์ •์˜ ํ”„๋กœํผํ‹ฐ๋Š” $_ ๋ผ.. 2022. 2. 20.
[Vue.js] v-model ์†์„ฑ๊ณผ @Model ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— ๊ด€ํ•ด์„œ Vue ์˜ v-model ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๐Ÿ“Œ v-model ์ด๋ž€? v-model ์€ Vue ์—์„œ ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ form ์š”์†Œ๋“ค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ž…๋ ฅ๋œ form ์š”์†Œ ๊ฐ’์„ ๋™๊ธฐ์ ์œผ๋กœ ์†์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ๐Ÿ“Œ v-model ์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ ๐Ÿ“Œ v-model ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์‹์–ด v-model ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์‹์–ด(modifier) ๊ฐ€ 3๊ฐ€์ง€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜์‹์–ด์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. .lazy .lazy ์ˆ˜์‹์–ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ change ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๊ฐ’์˜ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ input ์š”์†Œ์—์„œ focus out ๋  ๊ฒฝ์šฐ์—.. 2022. 2. 20.
[Vue.js] Vue ์—์„œ ๋น„๋™๊ธฐ ์š”์ฒญ์€ ์–ธ์ œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ? ๋น„๋™๊ธฐ ์š”์ฒญ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ• ๋•Œ ์–ด๋–ค ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿ“Œ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ์œ„ํ•œ ์ตœ์ ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์€? Vue ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ•ญ์ƒ ๊ณ ๋ฏผํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์–ด๋–ค ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ๊นŒ? ๋งŽ์€ Vue ์‚ฌ์šฉ์ž๋“ค์ด created ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ์„œ ์ € ๋˜ํ•œ ๋ง‰์—ฐํžˆ ์ด๋ฅผ ๋”ฐ๋ž๋Š”๋ฐ Vue ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ •๋ฆฌํ•˜๋ฉด์„œ ์ด์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ทผ๊ฑฐ๋ฅผ ์ฐพ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ ์ด๊ฒŒ ์ •๋‹ต์ด๋‹ค! ํ•˜๋Š” ๊ฑด ์—†์—ˆ์ง€๋งŒ ๊ทธ์ค‘ ๊ฐ€์žฅ ๋‚ฉ๋“์ด ๋ ๋งŒํ•œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Vue ์‚ฌ์šฉ์ž๋“ค์˜ ๋ณดํŽธ์ ์ธ ์˜๊ฒฌ ํ•ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋ถ„๋„ ์ €์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•˜์…จ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทผ๊ฑฐ๋กœ created ํ›…์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. beforeCreate, created, beforeMount ์–ด๋””์—์„œ ํ˜ธ.. 2022. 2. 20.
Vue.js ํด๋ž˜์Šค์™€ ์Šคํƒ€์ผ ๋ฐ”์ธ๋”ฉ ์ ์šฉํ•˜๊ธฐ ๐Ÿ“Œ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ ๊ต๋‚ด ํ•™๊ธฐ๋ง ์‡ผํ•‘๋ชฐ ๊ตฌํ˜„ ๊ณผ์ œ ์ง„ํ–‰ ๋„์ค‘ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์—์„œ ์ƒํ’ˆ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ตฌ๋งค ๊ฐ€๋Šฅ ์œ ๋ฌด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฐ‹๋ฐ‹ํ•œ ํ…์ŠคํŠธ๋Š” ์˜๋ฏธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ข‹์ง€ ๋ชปํ•˜๋‹ค ์ƒ๊ฐํ•ด ์ƒํƒœ๋ณ„๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ๋Š”๋ฐ Vue.js ์—์„œ๋Š” ๋™์  ํด๋ž˜์Šค ๋ฐ ์Šคํƒ€์ผ ๋ฐ”์ธ๋”ฉ ์„ ์ง€์›ํ•ด์ฃผ๊ณ  ์žˆ์–ด์„œ ์ด๋ฅผ ์ ์šฉํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ํด๋ž˜์Šค์™€ ์Šคํƒ€์ผ ๋™์  ๋ฐ”์ธ๋”ฉ Vue.js ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋žœ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด v-bind ๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ ํ˜น์€ ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํฌ๊ฒŒ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋˜๋Š”๋ฐ ํด๋ž˜์„œ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ด๋ฒˆ.. 2021. 3. 2.