Vue: $ attrs๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ์†Œํ’ˆ์ด ์—†์„ ๋•Œ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 08์›” 01์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋ฒ„์ „

2.4.2

๋ณต์ œ ๋งํฌ

https://jsfiddle.net/50wL7mdz/50757/

์žฌํ˜„ ๋‹จ๊ณ„

์†Œํ’ˆ์ด ์ œ๊ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ตฌ์„ฑ ์š”์†Œ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ ๊ฐœ์ฒด๋กœ $ attrs์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๊นŒ?

$ attrs๋Š” ์ธ์‹ ํ•  ์ˆ˜์—†๋Š” ์†Œํ’ˆ์„ ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ ํƒœ๊ทธ์— ์†Œํ’ˆ์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋นˆ ๊ฐœ์ฒด๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

$ attrs๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฐฉ๊ธˆ ์ด๊ฒƒ์— ๋ถ€๋”ช ์ณค๊ณ  $attrs ๋Š” undefined ์ด์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋” ์ผํ•˜๋Ÿฌ ๋ฐ–์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•  ์ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด,์ด ๋ชฉ๋ก์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์ด์ƒํ•œ ๊ฒƒ undefined ๋Œ€์‹  [] . ์•ฑ ์ „์ฒด์— if ๋ฌธ (๋˜๋Š” ์„ ํƒ์  ์—ฐ๊ฒฐ)์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

ํ‹ˆ์ƒˆ ์‹œ์žฅ ์‚ฌ๋ก€๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ™•์ธํ•˜๊ณ ์ž ํ•  ๋•Œ $attrs ์กด์žฌ, ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๊ฒƒ Object.keys($attrs).length ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ ๋ฎ์—ฌ ์žˆ๋„๋ก.

์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ผ๊ณ  ์ •๋ง๋กœ ํ™•์‹ ํ•˜๋Š” ๋ถ€๋ถ„์€ OP๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์†Œํ’ˆ์ด ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ ๋  ๋•Œ $attrs _is_๊ฐ€ ๋นˆ ๊ฐ์ฒด๋กœ ์„ค์ •๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ $attrs ๊ฐ€ ์žˆ๋Š”์ง€ ์‹ค์ œ๋กœ ํ™•์ธํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ์ „๋žต์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

$attrs && Object.keys($attrs).length

๋ชจ๋“  8 ๋Œ“๊ธ€

ํ˜ธ๊ธฐ์‹ฌ์—์„œ $attrs ์ •์˜๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? $attrs.something ์•ก์„ธ์Šคํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? (๊ทธ๋ ‡๋‹ค๋ฉด ์™œ?)

ํŽธ์ง‘ : ์†์„ฑ์ด ์—†์„ ๋•Œ $attrs ๋™์ผํ•˜๊ฒŒ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์‹ค์ œ๋กœ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ๋˜ํ•œ ๋ฌป์Šต๋‹ˆ๋‹ค

@greegus , if ($attrs.myProp) ๊ฐ™์€ ์ž‘์—…์„ํ•˜๋Š” ๊ฒฝ์šฐ babel-plugin-transform-optional-chaining ์„ ์‚ฌ์šฉํ•˜์—ฌ if ($attrs?.myProp) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์ง€๋งŒ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•‘ @greegus

๋ฐฉ๊ธˆ ์ด๊ฒƒ์— ๋ถ€๋”ช ์ณค๊ณ  $attrs ๋Š” undefined ์ด์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋” ์ผํ•˜๋Ÿฌ ๋ฐ–์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•  ์ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด,์ด ๋ชฉ๋ก์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์ด์ƒํ•œ ๊ฒƒ undefined ๋Œ€์‹  [] . ์•ฑ ์ „์ฒด์— if ๋ฌธ (๋˜๋Š” ์„ ํƒ์  ์—ฐ๊ฒฐ)์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

ํ‹ˆ์ƒˆ ์‹œ์žฅ ์‚ฌ๋ก€๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ™•์ธํ•˜๊ณ ์ž ํ•  ๋•Œ $attrs ์กด์žฌ, ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๊ฒƒ Object.keys($attrs).length ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ ๋ฎ์—ฌ ์žˆ๋„๋ก.

์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ผ๊ณ  ์ •๋ง๋กœ ํ™•์‹ ํ•˜๋Š” ๋ถ€๋ถ„์€ OP๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์†Œํ’ˆ์ด ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ ๋  ๋•Œ $attrs _is_๊ฐ€ ๋นˆ ๊ฐ์ฒด๋กœ ์„ค์ •๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ $attrs ๊ฐ€ ์žˆ๋Š”์ง€ ์‹ค์ œ๋กœ ํ™•์ธํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ์ „๋žต์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

$attrs && Object.keys($attrs).length

@chrisvfritz๊ฐ€ ์ €๋ฅผ ์„ค๋“ํ–ˆ์Šต๋‹ˆ๋‹ค-๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

@LinusBorg ํ˜„์žฌ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์ž‘์—…์ค‘์ธ ์‚ฌ๋žŒ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ™๋ณด๋ฅผํ•ด๋„ ๋ ๊นŒ์š”?

ํ™•์‹คํ•œ!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰