Vue: vuejs2.0์€ $broadcast, $dispatch ์ด๋ฒคํŠธ API๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋‚˜์š”? 2.0์—์„œ ์ง€์ ๊ฐ„ ๋ถ€๋ชจ-์ž์‹ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ข‹์€ ์†”๋ฃจ์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

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

@yyx990803 ,
์•ˆ๋…•ํ•˜์„ธ์š”, vuejs ํ•ต์‹ฌํŒ€์ž…๋‹ˆ๋‹ค.
vuejs2.0์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจ ์ž์‹ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ง€์  ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
vuejs2.0์€ $broadcast,$dispatch API๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— vuejs2.0 ์ด๋ฒคํŠธ ๋ฒ„์Šค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” $broadcast,$dispatch ๋Œ€์ฒด ์†”๋ฃจ์…˜์„ ์ฐพ๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š”์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ํฌ๋Ÿผ์— ์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์— , ๋‚˜๋Š” ๋” ๋…ผ์˜ ์—ฌ๊ธฐ๋ฅผ ๋ถ™์—ฌ ์‹ถ์Šต๋‹ˆ๋‹ค.

vuejs2.0์— ๋Œ€ํ•œ ์ข‹์€ ์•„์ด๋””์–ด๋‚˜ ์†”๋ฃจ์…˜์ด ์—†์œผ๋ฉด ๋‹ซ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

<pcom id=1>
    <soncoma></soncoma>
    <soncomb></soncomb>
</pcom>
<pcom id=2>
    <soncoma></soncoma>
    <soncomb></soncomb>
</pcom>

์œ„์˜ ์ฝ”๋“œ์—์„œ pcom1์˜ ์ž์‹์ด ์˜ˆ๋ฅผ ๋“ค์–ด, soncoma $emit ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ,

bus.$emit('son-coma-event',somedata)

pcom์—์„œ ์šฐ๋ฆฌ๋Š” ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ๋“ฃ์Šต๋‹ˆ๋‹ค.

bus.$on('son-coma-event',function(){})

๋‚˜๋Š” pcom1์ด ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ pcom2๋„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•?

๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” this.$parent๋ฅผ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์–ด๋ฆฐ์ด:

this.$parent.$emit('some-event',someData)

๋ถ€๋ชจ์—์„œ:

{
   created(){
       this.$on('some-event',function(){})
}

์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ถ€์ •์ ์ธ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์šฐ๋ฆฌ๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์— ๋Œ€ํ•ด ๋งŽ์ด ์ปคํ”Œ๋งํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ€๋ชจ-์ž์‹ ์ˆ˜์ค€์˜ ๋” ์‹ฌ์ธต์ ์ธ ์ˆ˜์ค€์ด ์žˆ์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข€ ๋” ๋ณต์žกํ•œ ์กฐ๊ฑด์—์„œ๋Š” ์žฌ๊ท€ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์„ ์ฐพ๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 <pcom>
    <recursivechild>
             <recursivechild>
                          <recursivechild>
                          </recursivechild>
             </recursivechild>
    <recursivechild>
</pcom>

 <pcom>
    <recursivechild>
             <recursivechild>
                          <recursivechild>
                          </recursivechild>
             </recursivechild>
    <recursivechild>
</pcom>

recursivechild๊ฐ€ ์ง์ ‘ pcom ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์ด๋‚˜ ์š”์ ์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~!

discussion

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

@rhyek ๋‹น์‹ ์ด ์ œ๊ธฐ ํ•œ ๋ช‡ ๊ฐ€์ง€ ํฌ์ธํŠธ์— ๋Œ€ํ•ด ๋‚ด

1. ์•”์‹œ์  ๊ฒฐํ•ฉ.

์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ชจ์™€ ๊นŠ์ด ์ค‘์ฒฉ๋œ ์ž์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ์—์„œ ์ด ๊ด€๊ณ„๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  $broadcast ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค).

Vue 2.0์—์„œ ๋„์ž…ํ•œ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์‚ฌ์šฉ ์ค‘๋‹จ์„ ์‚ดํŽด๋ณด๋ฉด ๋ช…์‹œ์  ๋Œ€์•ˆ์„ ์œ„ํ•ด ์•”์‹œ์  ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์ฃผ์ œ์ด๋ฉฐ $dispatch ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๊ฑฐ๊ธฐ์— ๋งž์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

// parent
events: {
  'some-event': function () { ... }
}

// deeply nested child:
$dispatch('some-event')

๋ถ€๋ชจ์— ์ง๊ณ„ ์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” $emit() ๋„ ์‹ค์ œ ์ถ”๊ฐ€ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ ์ž์‹(ํŠนํžˆ ๊นŠ์ด ์ค‘์ฒฉ๋œ) ๋˜๋Š” ๋‘˜ ์ด์ƒ์˜ ์ง๊ณ„ ์ž์‹์ด ์žˆ๋Š” ์ฆ‰์‹œ (ํŠนํžˆ ํŒ€์—์„œ) ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž์‹์„ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ ์ฝ”๋“œ ์ฃผ์„์— ์˜์กดํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ƒ์šฉ๊ตฌ์ด๊ธฐ๋„ ํ•œ ์ž์‹ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— $dispatch ๋ฐ $broadcast๋ฅผ ์ข‹์•„ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•„์ˆ˜์ ์ธ ์ƒํ™ฉ์„ ๋งŽ์ด ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋จ/ ์ด ์—ฌํ–‰ ๋™์•ˆ ์ค‘๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ•ด.

2. ์ด๋ฒคํŠธ๋ช…

๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•จ๊ป˜ $dispatch ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฒคํŠธ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งค์šฐ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

// parent
events: {
  'close': function () { ... }
}

// deeply nested child 1:
$dispatch('close')
// deeply nested child 2:
$dispatch('close')

..๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๊ทธ ์•„์ด๋“ค์ด ์ œ3์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋ฉด, ๋‹น์‹ ์€ ์ด์ œ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋ถ€๋ชจ์—๊ฒŒ $dispatch() ๋” ๊ฐ€๊ธฐ ์ „์— ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์— ์žˆ๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์žก์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฒคํŠธ์— ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

$emit ๋ฐ ํ…œํ”Œ๋ฆฟ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณณ์—์„œ ๊ฐ„๋‹จํ•˜๊ณ  ์งง์€ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ด๋ฒคํŠธ์—๋Š” @close="callback "ํ…œํ”Œ๋ฆฟ์— ์—ฐ๊ฒฐ๋œ ๊ณ ์œ ํ•œ ์ฝœ๋ฐฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๋ง๋กœ ๋‹น์‹ ์ด ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด *์„ ํƒ*์„ ๋ฐ•ํƒˆํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋˜‘๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋™๋“ฑํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์œ„์˜ ์ด์œ  ๋“ฑ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” "๊ธ€๋กœ๋ฒŒ ๋ฒ„์Šค" ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋‚จ๊ฒจ๋‘๊ณ  ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์•ˆ๋‚ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์šฐ๋ ค์— ๋Œ€ํ•ด์„œ๋„ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ๊ท€ํ•˜์˜ ์ž…์žฅ์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

$dispatch ๋ฐ $broadcast๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "์šฐ๋ฆฌ" ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

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

์ผ๋ฐ˜์ ์ธ ์ œ์•ˆ ํ† ๋ก ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ๋ฐ”์ด์˜ฌ๋ฆฐ์„ ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~!

์ด๊ฒƒ์€ ์ด๋ฏธ 2.0 ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—์„œ ์ •๋‹นํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ณธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$dispatch ๋ฐ $broadcast ์‚ฌ์šฉ ์ค‘๋‹จ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

$dispatch ๋ฐ $broadcast ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์— ์˜์กดํ•˜๋Š” ์ด๋ฒคํŠธ ํ๋ฆ„์ด ๊ตฌ์„ฑ ์š”์†Œ ํŠธ๋ฆฌ๊ฐ€ ์ปค์งˆ ๋•Œ ์ถ”๋ก ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํฐ ์•ฑ์—์„œ ์ž˜ ํ™•์žฅ๋˜๋ฉฐ ๋‚˜์ค‘์— ๊ณ ํ†ต์„ ๊ฒช์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) $dispatch ๋ฐ $broadcast ๋„ ํ˜•์ œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  Node.js ์˜

var bus = new Vue()
// in component A's method
bus.$emit('id-selected', 1)
// in component B's created hook
bus.$on('id-selected', function (id) {
 // ...
})

์ด ํŒจํ„ด์€ ๊ฐ„๋‹จํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ $dispatch ๋ฐ $broadcast ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ๋ณต์žกํ•œ ๊ฒฝ์šฐ์—๋Š” Vuex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์šฉ ์ƒํƒœ ๊ด€๋ฆฌ ๊ณ„์ธต์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€์ด๋“œ์— ํ‘œ์‹œ๋œ ์˜ˆ๋Š” ๊ท€ํ•˜๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ ํ†ต์‹  ์ •๋ณด: ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๋Š” ๋ชจ๋“  ์–ด๋ฆฐ์ด๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๊ณตํ†ต ๋ถ€๋ชจ๊ฐ€ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

@posva , ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์Šค ํ—ˆ๋ธŒ๋Š” ๋‹จ์ˆœํ•œ ๋‹จ์ผ ๊ตฌ์„ฑ ์š”์†Œ ์ง€์  ๋Œ€ ๋‹จ์ผ ๊ตฌ์„ฑ ์š”์†Œ ์ง€์  ํ†ต์‹ ์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์œ ํ˜•์„ ๊ฐ€์ง„ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ์ •์ƒ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒƒ์€ ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ์— ์†ํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฒคํŠธ ๋ฒ„์Šค ๊ตฌํ˜„์€ ๋ชฉ์ ์ง€ ๋˜๋Š” ๋ฐœ์‹  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์˜ _uid๋ฅผ ๋ณด์•˜๊ณ  ์ด๋ฒคํŠธ ๋ฐฐ์„ ์— ์ด ๊ณ ์œ ํ•œ _uid๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ). ๋”ฐ๋ผ์„œ vuejs2.0์€ ์‹ค์ œ๋กœ ์ง€์  ๊ฐ„ ์ด๋ฒคํŠธ ํ†ต์‹ ์„ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. . ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด vuejs2.0 ์ด๋ฒคํŠธ ๋ฒ„์Šค๋Š” ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์—์„œ ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์œผ๋กœ๋งŒ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋‚˜์š”? ํ•ด๋‹น ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํŠธ๋ฆฌ์˜ ์ด๋ฒคํŠธ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ITS OWN DATA ์—…๋ฐ์ดํŠธ
vuex๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€์˜ ์ „์—ญ ์ •์  ์ƒํƒœ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์ ํ•ฉํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํŠน์ • ๋กœ์ปฌ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์—๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ƒ๊ฐ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

@cnweibo ํฌ๋Ÿผ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ๊ฐ€ ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
http://forum.vuejs.org/topic/4832/vue2-0-event-bus-issue-how-to-deliver-event-to-parent-when-the-same-multiple-parent-children-in- ๋”/6

ํ•ด๋‹น ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?
ํŠธ๋ฆฌ์˜ ์ด๋ฒคํŠธ ๋ฐ ์ž์ฒด ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

์ด๊ฒƒ์€ ๋ณต์žกํ•œ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ ์—†์ด ๋‹จ์ˆœํžˆ vuex๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

vuex๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€์˜ ์ „์—ญ ์ •์  ์ƒํƒœ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํŠน์ • ๋กœ์ปฌ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ์ดํ„ฐ์—๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ด€๋ฆฌ

'๋กœ์ปฌ'์€ ๋‹จ์ผ ๊ตฌ์„ฑ ์š”์†Œ๋งŒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ „์ฒด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ „์—ญ์ ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  vuex๋Š” ๋ชจ๋“ˆ(์ƒํƒœ ํ•˜์œ„ ํŠธ๋ฆฌ)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ '์ „์—ญ ๋ณ€์ˆ˜'๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
์ผ์ข…์˜ '๊ธ€๋กœ๋ฒŒ'์ด๋‹ค. ์ž์ฒด vuex๋กœ ๊ตฌ์„ฑ ์š”์†Œ ๊ทธ๋ฃน์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“ˆ.

์ด ์ „์ฒด '์ด๋ฒคํŠธ ๋Œ€ ๊ณต์œ  ์ƒํƒœ' ํ† ๋ก ์€ ๋ช‡ ๋‹ฌ ๋™์•ˆ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ „์ด๋ฉฐ ๊ฒฐ๋ก ์€ ๊ธ€๋กœ๋ฒŒ ์ด๋ฒคํŠธ ๋ฒ„์Šค ๋˜๋Š” vuex๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š”
vuex์™€ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ฝ์–ด๋ณผ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

2016๋…„ 9์›” 1์ผ ๋ชฉ์š”์ผ 16:17 cnweibo [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@posva https://github.com/posva , ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์Šค
ํ—ˆ๋ธŒ๋Š” ๋‹จ์ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹จ์ˆœํ•œ ๋‹จ์ผ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ •๋ง ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ํฌ์ธํŠธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜. ๋™์ผํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
์œ ํ˜•์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ์ •์ƒ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋งŽ์€
๊ฒฝ์šฐ์—, ๋‚ด๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ผ๋ถ€์— ์†ํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค
ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ. ํ˜„์žฌ ์ด๋ฒคํŠธ ๋ฒ„์Šค ๊ตฌํ˜„์€ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ชฉ์ ์ง€ ๋˜๋Š” ์ถœ๋ฐœ์ง€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด(๋‚˜๋Š” ๋ชจ๋“ 
์ด๋ฒคํŠธ ์—ฐ๊ฒฐ์— ์ด ๊ณ ์œ ํ•œ _uid๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ), ๊ทธ๋ž˜์„œ
vuejs2.0์€ ์‚ฌ์‹ค point to point ์ด๋ฒคํŠธ ํ†ต์‹ ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜๋ ค๊ณ 
์ •ํ™•ํ•œ vuejs2.0 ์ด๋ฒคํŠธ ๋ฒ„์Šค๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์œ ํ˜•๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์˜์‚ฌ ์†Œํ†ต? ํ•ด๋‹น ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?
ํŠธ๋ฆฌ์˜ ์ด๋ฒคํŠธ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  _ITS OWN DATA_ ์—…๋ฐ์ดํŠธ
vuex๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€์˜ ์ „์—ญ ์ •์  ์ƒํƒœ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํŠน์ • ๋กœ์ปฌ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ์ดํ„ฐ์—๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ด€๋ฆฌ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ƒ๊ฐ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/vuejs/vue/issues/3581#issuecomment -244008699 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AFTLl1bjHqWTVDAkr8Fqbx0WiTuH16n2ks5qlooBgaJpZM4JyUfJ
.

์ด์ œ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์†”๋ฃจ์…˜์ด ์ œ๊ณต๋˜์—ˆ๊ณ 
  2. Github ๋ฌธ์ œ๋Š” ์–ด์จŒ๋“  ์ง€์›์„ ์š”์ฒญํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(์ง€์นจ ์ฐธ์กฐ).

@ktsn , ๋ฐ๋ชจ ๋ฐ”์ด์˜ฌ๋ฆฐ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์„ ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!
@fnlctrl , ์†Œ์œ„ ๋ชจ๋“ˆ์‹ vuex ์ƒํƒœ ๊ด€๋ฆฌ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~!

๋‚ด ์ƒ๊ฐ์— $broadcast๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ๋–จ์–ด์ง€๋Š” ์†Œํ’ˆ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  $dispatch๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹จ์ผ ๋ ˆ๋ฒจ v-on ๋ฐ $emit์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Vue 1์—์„œ).
๊ด€๋ จ๋œ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ <child-component @select="$emit('select', $arguments[0])" />
๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๊ตฌ์„ฑ ์š”์†Œ ์ž์ฒด์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ํƒœ๊ทธ์˜ v-on์€ ๊ตฌ์„ฑ ์š”์†Œ ์ž์ฒด์˜ $emit์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@cnweibo ๊ธฐ๋ก์˜ ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  template: `<foo @bar="dosomething">`,
  methods: {
    dosomething(params1, params2, ... and all the event data args) {}
  }
}

ํ•˜์ง€๋งŒ vuejs2.0์—์„œ๋Š” ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ทธ๋Ÿด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@fnlctrl
@LinusBorg
์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์˜คํ•ด๋ฅผ ํ•ด์„œ ๋ถˆ๋ช…ํ™•ํ•˜๊ฒŒ ๋ง์”€๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ œ๊ณต๋œ @fnlctrl ํŒจํ„ด์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 <comp @some-event-emitted-by-comp-internal-template="someFuncInParentScope"></comp>

๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ๋‚ด ์ž์‹ ์˜ ์˜๊ฒฌ์„ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ: https://github.com/vuejs/vue/issues/2760#issuecomment -250883407

$dispatch๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋”์ฐํ•œ ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ๊ฐ์  ํŠธ๋ฆฌ ์œ„๋กœ ๋ฒ„๋ธ”๋ง ์ž‘์—…/์ด๋ฒคํŠธ์˜ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ์ตœ์ดˆ์˜ UI ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ž˜ ํ™•๋ฆฝ๋œ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. "์•Œ ์ˆ˜ ์—†๋Š” ์ƒ์œ„ ํŠธ๋ฆฌ์—์„œ ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ๋ฌธ์ œ์˜ ์ฒ˜๋ฐฉ์ฒ˜๋Ÿผ ๋“ค๋ฆฐ๋‹ค"๋Š” ์ „์ œ ํ•˜์— ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์ด ์ด ๊ธฐ๋Šฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ์•„๋‹™๋‹ˆ๋‹ค!

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ DOM ๋ฐ DOM ์ด๋ฒคํŠธ์™€ ๊ฐ™์€ ์˜ค๋žซ๋™์•ˆ ํ™•๋ฆฝ๋œ ์›น ๊ธฐ์ˆ /๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์„ ๋•Œ ์‹ค์ œ๋กœ ์‹œ๊ฐ์  ํŠธ๋ฆฌ๋ฅผ ๋ฒ„๋ธ”๋งํ•˜๊ณ  ์•„๋ฌด๋„ ์—†์ด ๊ทธ๋ ‡๊ฒŒ ํ•ด์™”์„ ๋•Œ ์ด ๋ณ€๊ฒฝ์˜ ์ด์ ์„ ์‹ค์ œ๋กœ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ถˆํ‰. ์›น ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ W3C ์ œ์•ˆ ๋•๋ถ„์— ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์ตœ๊ทผ์— ์ฑ„ํƒ๋œ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€์š”? ์ œ ์ƒ๊ฐ์—๋Š” Vue ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ผ๋ฐ˜ DOM ์š”์†Œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€๋กœ๋ฒŒ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋œ ๋Œ€์•ˆ์€ ๋” ์‹ค์šฉ์ ์ด๊ณ  ํšจ๊ณผ์ ์ด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด(์ˆ˜๋…„๊ฐ„ ์ž˜ ํ™•๋ฆฝ๋œ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์—) ์ด๋ฏธ ์กด์žฌํ–ˆ์„ ๋•Œ ๋‚˜์—๊ฒŒ ๋น„๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์ œ์•ˆ์€ EmberJS๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐ๋‚˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๊ฐ ์ˆ˜์ค€ ์•„๋ž˜์— ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ์†์„ฑ์œผ๋กœ ํด๋กœ์ € ์ž‘์—…์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ์ง€๋ฃจํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ! Vuejs๋Š” ๋‚ด๊ฐ€ https://www.npmjs.com/package/ember-component-action-bubbling์„ ์“ด ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค

์ด๊ฒƒ ์™ธ์—๋„ ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋„์„œ๊ด€์„ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง„์ง€ํ•˜๊ฒŒ, ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋”์ฐํ•œ ๋ณ€ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฒ„์Šค ํŒจ๋Ÿฌ๋‹ค์ž„์€ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ข…์ข… ์„ ์–ธ์  ์ƒํƒœ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ณด๋‹ค ์—ด๋“ฑํ•  ๋•Œ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜์˜ ๊ฒฝ์šฐ:

  1. ๋กœ๊ทธ์ธ ์ด๋ฒคํŠธ ์ˆ˜์‹ 
  2. ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
  3. ์–ด๋–ค ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ˆ˜์‹  ์ค‘์ด๋“  ๊ทธ์— ๋”ฐ๋ผ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ DOM์—์„œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ• ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋””์—์„œ ์˜ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์–ธ์–ด๋ฅผ ์‹ค๋ก€ํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.

์ƒํƒœ ์ €์žฅ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ๊ณ„์ • ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ „์—ญ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด null ์ด๊ณ  ๋กœ๊ทธ์ธํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ ๊ณ„์ • ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ƒํƒœ ๋ณ€์ˆ˜์— ์˜์กดํ•˜๋Š” ์•ฑ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์€ ๊ทธ์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ์—†์œผ๋ฉฐ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ๊ธฐ ๋˜๋Š” ์œ„์น˜๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—…๋ฐ์ดํŠธ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?

์„ ์–ธ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๊ด€๊ณ„์—†์ด ์ƒํ™ฉ์„ ๋“ฃ์ง€ ์•Š๊ณ ๋„ ๋กœ์ปฌ/๊ธ€๋กœ๋ฒŒ ์ƒํƒœ์— ๋”ฐ๋ผ ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด Vue๊ฐ€ ์ค„๊ณง ์˜๋„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์•Œ์•„๋‚ด๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์„œ ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„, ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹œํ•˜๊ณ  AJAX ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ๋•Œ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•œ ํ›„ 'loggedIn' ๋ณ€์ˆ˜๋ฅผ ๊ด€์ฐฐํ•˜๊ณ , ์ด๊ฒƒ์ด true์ด๋ฉด ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ์ผ๋ถ€ ์ž„์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ „์—ญ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ ์ž„์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์‹ ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์ด ์‹ค์ˆ˜๋กœ "๋”๋Ÿฌ์›Œ"์ง€๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์œ„ํ—˜์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊น”๋”ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ณด๋‹ค ๋” ์ดํ•ด๊ฐ€ ๋˜๋Š” ํŠน์ • ์ƒํ™ฉ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธ ์ƒํƒœ๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•Œ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ์ƒํƒœ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๋Š” ๋ฒ„ํŠผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์œ„ ์ฒด์ธ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๊ฒฝ๋กœ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์€ ๊ฐ€๋Šฅ์„ฑ ๋งŒ์— ๋กœ๊ทธ์ธ ํ•  ์˜๋„์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ†ต์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.์ด ๋ฒ„ํŠผ์€, ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ง์ ‘ ์ „์—ญ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ $dispatch๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ  ์˜๋„๋ฅผ ์ง์ ‘ ์•Œ๋ฆฌ๋Š” ์ผ๋ถ€ ์ „์—ญ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„ํŠผ์ด ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‹จ๋‹จํžˆ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ๋ฒ„ํŠผ์ด 10๋‹จ๊ณ„ ๊นŠ์ด๋กœ ์ค‘์ฒฉ๋˜์–ด ์žˆ๊ณ  ์˜๋„๊ฐ€ ๋ชฉ์ ์— ๋„๋‹ฌํ•˜๋„๋ก ๋ชจ๋“  ์ˆ˜์ค€์—์„œ v-on:login ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ v-on ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์ƒํƒœ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ Vuex๋Š” ๋Œ์—ฐ๋ณ€์ด์™€ ์•ก์…˜์œผ๋กœ ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์†”๋ฃจ์…˜์ด ๋‹ค๋ฅธ ์†”๋ฃจ์…˜๋ณด๋‹ค ๋” ์ž˜ ๋งž๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค์ด์ง€๋งŒ ์„ ์–ธ์  ๋…ผ๋ฆฌ๊ฐ€ ๋” ๋‚˜์€ ์˜ต์…˜์ด ์•„๋‹Œ ์ƒํ™ฉ์€ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ํŠน์ • ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์ธ ์ „์šฉ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ€๋ก์—์„œ ๋กœ๊ทธ์ธ ๊ด€๋ จ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ ๊ทธ๋ ‡๊ฒŒ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋˜์–ด ์žˆ์œผ๋ฉด ์ „์—ญ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์€ ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  vuex store๋Š” ์ œ๊ฐ€ "some global object"๋ฅผ ์–ธ๊ธ‰ํ•  ๋•Œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. vuex๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์กฐ์‚ฌํ•ด์•ผ ํ•˜์ง€๋งŒ ์Šคํ† ์–ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์•ฑ ์ƒํƒœ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ์ž„์˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋„๋ฆฌ ์ธ์‹๋˜์–ด ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์—ฌ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ฒฝ์šฐ ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด *_choice *_๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ผ์šฐํ„ฐ ๋ณด๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” ๋‚ด ์ƒ๊ฐ์— ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ถŒํ•œ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— "์ผ๋ถ€ ์ž„์˜ ๊ตฌ์„ฑ ์š”์†Œ"๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํŠผ, ์–‘์‹ ๋˜๋Š” ๊ธฐํƒ€ UI ์š”์†Œ์™€ ๊ฐ™์ด ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋” ์ž‘์€ ๊ตฌ์„ฑ ์š”์†Œ์ธ ๊ฒฝ์šฐ 10๋ฒˆ ์ค‘ 9๋ฒˆ์€ ์†Œํ’ˆ ๋ฐ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•  ๋…ผ๋ฆฌ์  ์ด์œ ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Vue ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•˜ํ–ฅ์‹์ด๋ฏ€๋กœ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊นŠ์€ ๋‚ดํฌ ์ž์ฒด๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ํ”ผํ•ด์•ผ ํ•  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ๋‘ ๋‹จ๊ณ„ ์•„๋ž˜๋กœ ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ท€์ฐฎ์€ ์ผ์ด ์•„๋‹ˆ์ง€๋งŒ, ๊ทธ๋ณด๋‹ค ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ฉด ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ๋ฅผ ์žฌ๊ณ ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ์ ‘์„ ์ž…๋‹ˆ๋‹ค. ์ข…์ข… ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๊ฒฐ๊ตญ ์ง€์˜ฅ ๋๊นŒ์ง€ ๋‚จ์šฉ๋˜๊ณ  ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ˜„์žฌ 2.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๋™์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. 1.0์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10๋ฒˆ ์ค‘ 9๋ฒˆ์€ props์™€ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ† ์–ด์— ์ ‘๊ทผํ•  ๋…ผ๋ฆฌ์  ์ด์œ ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ๋‚ด ์š”์ .

๋”ฅ ๋„ค์ŠคํŒ… ์ž์ฒด๊ฐ€ ์ตœ๋Œ€ํ•œ ํ”ผํ•ด์•ผ ํ•  ๋ฌธ์ œ

๋•Œ๋กœ๋Š” ์ด๊ฒƒ์ด ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๋ฅผ ๋‘ ๋‹จ๊ณ„ ์•„๋ž˜๋กœ ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ท€์ฐฎ์€ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ˆ˜์ค€์ด ๋” ๊นŠ์–ด์ง€๋ฉด ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๊ฒฐ๊ตญ ์ง€์˜ฅ ๋๊นŒ์ง€ ํ•™๋Œ€๋‹นํ•˜๊ณ  ๋‹ค๋ฃจ๊ธฐ ํž˜๋“  ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž์˜ ๊ทœ์œจ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

1.0์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Œ.

๋‹จ์ˆœํ•จ๊ณผ ํŽธ๋ฆฌํ•จ์ด ๋‚ด๊ฐ€ Ember์—์„œ Vue๋กœ ์ „ํ™˜์„ ๊ณ ๋ คํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. $dispatch ๋Š” ๋‚ด๊ฐ€ Vue์—์„œ ์ฆ๊ฒผ๋˜ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ์ž„์˜์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

ํŒ€์€ 2.0 ๋ฆด๋ฆฌ์Šค์—์„œ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์†”์งํžˆ ๊ทธ๋“ค ๋ชจ๋‘์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋งŒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ต๋ณ€ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ktsn $broadcast ๋ฐ $dispatch์—

@rhyek ๋‹น์‹ ์ด ์ œ๊ธฐ ํ•œ ๋ช‡ ๊ฐ€์ง€ ํฌ์ธํŠธ์— ๋Œ€ํ•ด ๋‚ด

1. ์•”์‹œ์  ๊ฒฐํ•ฉ.

์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ชจ์™€ ๊นŠ์ด ์ค‘์ฒฉ๋œ ์ž์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ์—์„œ ์ด ๊ด€๊ณ„๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  $broadcast ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค).

Vue 2.0์—์„œ ๋„์ž…ํ•œ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์‚ฌ์šฉ ์ค‘๋‹จ์„ ์‚ดํŽด๋ณด๋ฉด ๋ช…์‹œ์  ๋Œ€์•ˆ์„ ์œ„ํ•ด ์•”์‹œ์  ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์ฃผ์ œ์ด๋ฉฐ $dispatch ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๊ฑฐ๊ธฐ์— ๋งž์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

// parent
events: {
  'some-event': function () { ... }
}

// deeply nested child:
$dispatch('some-event')

๋ถ€๋ชจ์— ์ง๊ณ„ ์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” $emit() ๋„ ์‹ค์ œ ์ถ”๊ฐ€ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ ์ž์‹(ํŠนํžˆ ๊นŠ์ด ์ค‘์ฒฉ๋œ) ๋˜๋Š” ๋‘˜ ์ด์ƒ์˜ ์ง๊ณ„ ์ž์‹์ด ์žˆ๋Š” ์ฆ‰์‹œ (ํŠนํžˆ ํŒ€์—์„œ) ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž์‹์„ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ ์ฝ”๋“œ ์ฃผ์„์— ์˜์กดํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ƒ์šฉ๊ตฌ์ด๊ธฐ๋„ ํ•œ ์ž์‹ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— $dispatch ๋ฐ $broadcast๋ฅผ ์ข‹์•„ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•„์ˆ˜์ ์ธ ์ƒํ™ฉ์„ ๋งŽ์ด ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋จ/ ์ด ์—ฌํ–‰ ๋™์•ˆ ์ค‘๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ•ด.

2. ์ด๋ฒคํŠธ๋ช…

๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•จ๊ป˜ $dispatch ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฒคํŠธ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งค์šฐ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

// parent
events: {
  'close': function () { ... }
}

// deeply nested child 1:
$dispatch('close')
// deeply nested child 2:
$dispatch('close')

..๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๊ทธ ์•„์ด๋“ค์ด ์ œ3์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋ฉด, ๋‹น์‹ ์€ ์ด์ œ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋ถ€๋ชจ์—๊ฒŒ $dispatch() ๋” ๊ฐ€๊ธฐ ์ „์— ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์— ์žˆ๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์žก์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฒคํŠธ์— ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

$emit ๋ฐ ํ…œํ”Œ๋ฆฟ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณณ์—์„œ ๊ฐ„๋‹จํ•˜๊ณ  ์งง์€ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ด๋ฒคํŠธ์—๋Š” @close="callback "ํ…œํ”Œ๋ฆฟ์— ์—ฐ๊ฒฐ๋œ ๊ณ ์œ ํ•œ ์ฝœ๋ฐฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๋ง๋กœ ๋‹น์‹ ์ด ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด *์„ ํƒ*์„ ๋ฐ•ํƒˆํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋˜‘๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋™๋“ฑํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์œ„์˜ ์ด์œ  ๋“ฑ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” "๊ธ€๋กœ๋ฒŒ ๋ฒ„์Šค" ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋‚จ๊ฒจ๋‘๊ณ  ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์•ˆ๋‚ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ธ€๋กœ๋ฒŒ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์šฐ๋ ค์— ๋Œ€ํ•ด์„œ๋„ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ๊ท€ํ•˜์˜ ์ž…์žฅ์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

$dispatch ๋ฐ $broadcast๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "์šฐ๋ฆฌ" ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

$dispatch/$broadcast ์™€ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋‘˜ ๋‹ค ์œ ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ชจ๋“  ๊ฒฝ์šฐ์— ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ๋งํ•˜๊ธฐ๋Š” ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

@cnweibo ์–‘์ธก์— ์ƒ๋‹นํžˆ ์ฒ ์ €ํ•œ ๋…ผ์Ÿ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์†”์งํžˆ "์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ œ ํ•ด๊ฒฐ"์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์š”์ ์€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ๋” ๋งŽ์€ ์ฃผ์žฅ์„ ํŽผ์น  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฐ ์ผ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ๋ง์”€๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง ์›ํ•œ๋‹ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@LinusBorg ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ๊ท€ํ•˜์˜ ์ฃผ์žฅ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

$dispatch์™€ $broadcast๋ฅผ ์ข‹์•„ํ•œ๋‹ค๊ณ 

๋‚˜๋Š” ์†”์งํžˆ $dispatch ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. $broadcast ํ™•์‹คํžˆ ์ด์ƒํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด $dispatch ๋Š” ํ˜„์žฌ ๋งŽ์€ ํ”Œ๋žซํผ์—์„œ ๋ณดํŽธ์ ์ธ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ž…๋‹ˆ๋‹ค. $broadcast ... ๋ณ„๋กœ. ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์œ ์ผํ•œ ๊ฒƒ์€ ์ผ๋ฐ˜ ์ด๋ฒคํŠธ์™€ ์Œ์„ ์ด๋ฃจ๋Š” WPF์˜ "๋ฏธ๋ฆฌ๋ณด๊ธฐ" ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ตœ์ƒ์œ„ ์š”์†Œ์—์„œ ์›๋ž˜ ์ด๋ฒคํŠธ์˜ ์†Œ์Šค๋กœ ์‹œ๊ฐ์  ํŠธ๋ฆฌ๋ฅผ "ํ†ต๊ณผ"ํ•˜์ง€๋งŒ ๊ด€๋ จ ์š”์†Œ์˜ ์ฒด์ธ ์•„๋ž˜๋กœ ์ง์ ‘ ์ „์†ก๋  ๋ฟ ๋ชจ๋“  ๊ฒƒ์œผ๋กœ _ํ™•์‚ฐ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ ๋งค์šฐ ๋ช…์‹œ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋™์˜ํ•˜๊ณ , ์–ด์จŒ๋“  ๊ทธ๊ฒƒ์€ ๋ณดํ†ต ๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด jQuery์—์„œ ํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ถ€ ํ”Œ๋žซํผ์€ "์†Œ์Šค" ๊ฐœ์ฒด๋ฅผ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ๋ณด๋‚ด๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํžŒํŠธ: instanceof ). ์˜ˆ๋ฅผ ๋“ค์–ด DOM ์ด๋ฒคํŠธ์—๋Š” event.target ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์€ ์ •์  ์œ ํ˜•์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์ด์ ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด "์ถฉ๋Œ"์ด ๋ฐœ์ƒํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค(์ด๋ฒคํŠธ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ž„).

์–ด์จŒ๋“  ์ด๊ฒƒ์ด VueJS ํŒ€์— ์™œ ๊ทธ๋ ‡๊ฒŒ ์šฐ๋ ค๋˜๋Š”์ง€ ์†”์งํžˆ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด $dispatch ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ์ฃผ์˜ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋“ค์ด ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€์ฃผ์˜ํ•˜์ง€ ์•Š๋„๋ก "๋ณดํ˜ธ"ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋””๊นŒ์ง€ ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋ถ€๋ชจ์—๊ฒŒ ์ง๊ณ„ ์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” $emit()๋„ ์‹ค์ œ ์ถ”๊ฐ€ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ •์งํ•œ ์งˆ๋ฌธ(์ €๋Š” Vue๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—) ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ฒด์ธ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์ด๋ฒคํŠธ๋ฅผ $emit ํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋„ˆ๋ฌด ์งœ์ฆ๋‚˜๋„ค์š”.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ "๊ณต์‹ ํ…œํ”Œ๋ฆฟ" ๋„์ž…์— ๋Œ€ํ•ด vue-cli ์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ์ธ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(https://github.com/vuejs/vue-cli/issues/123#issuecomment-233071630).

๊ณต์‹ ํ…œํ”Œ๋ฆฟ์— ์–ฝ๋งค์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ์ž์œ ๋ฅผ ์ฃผ์ง€๋งŒ ๋™์‹œ์— ๋” ๋งŽ์€ ๊ฒฐ์ •์„ ์Šค์Šค๋กœ ํ•ด์•ผ ํ•˜๋Š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฒฐ๊ตญ ๋ชจ๋“  ๊ฒƒ์ด ๊ท ํ˜•์˜ ๋ฏธํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฐ์ • ์ค‘ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“ (๋Œ€๋ถ€๋ถ„) ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์Šค๋กœ ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฐ์ •์˜ ์ˆ˜ ๋˜๋Š” ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์ฒ ํ•™์— ๋™์˜ํ•˜์ง€๋งŒ, ์ด์ƒํ•˜๊ฒŒ๋„ _์ด_ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ์ ‘ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ํƒœ๋„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ ๋Œ“๊ธ€๊ณผ ์—ฌ๊ธฐ ๋Œ“๊ธ€ ์‚ฌ์ด์˜ ๋Œ€์กฐ๋Š” ์ž์œ ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋น„๋ก ์ข‹๊ธด ํ•˜์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ๊ฒฐํ•จ์ด ์žˆ๋Š” ์˜๋„์— ๋”ฐ๋ผ ์„ ํƒ์„ ์ทจ์†Œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง ์›ํ•œ๋‹ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@yyx990803 ๊ทธ๊ฒŒ ์•„๋งˆ _๋‚ด๊ฐ€ ํ•˜๊ฒŒ ๋ _ ์ผ... ์•„๋งˆ๋„.

@LinusBorg ๋˜ํ•œ:

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” "๊ธ€๋กœ๋ฒŒ ๋ฒ„์Šค" ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋‚จ๊ฒจ๋‘๊ณ  ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์•ˆ๋‚ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ "์กฐ์ข…ํ•˜๋ ค๊ณ "ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

dispatch ๋ฐ EventBus ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?
๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@posva ํ•  ๊ณ„ํš์ด์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ถ€ ๋ชจ๋“ˆ์—์„œ ์ด๋ฒคํŠธ ๋ฒ„์Šค ๊ฐœ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  $emit ์›ํ•˜๋Š” ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”? ๋‚œ ๊ทธ๊ฒŒ ์‹ซ์–ด, tbh. ๋‚˜๋Š” ๋ถ„๋ช…ํžˆ ๊ทธ๊ฒƒ์„ ์–ด๋–ค ์ผ์— ์‚ฌ์šฉํ•  ๊ฒƒ์ด์ง€๋งŒ, ๋งค๋ฒˆ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๊ณ  ๊ตณ๊ฒŒ ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ด๊ฒƒ์ด VueJS ํŒ€์— ์™œ ๊ทธ๋ ‡๊ฒŒ ์šฐ๋ ค๋˜๋Š”์ง€ ์†”์งํžˆ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด $dispatch ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ์ฃผ์˜ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด,

์Œ, ์š”์ ์€ ํŒ€์—์„œ ์•„๋ฌด๋„์˜ ์‹ค์ œ ์“ฐ์ž„์ƒˆ๋ฅผ ์ง€์  ํ•  ์ˆ˜ ์—†๋‹ค๊ณ ์ž…๋‹ˆ๋‹ค $dispatch() ๊ฐ€ (๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์— ๋ฐ”๋žŒ์ง์ด์—ˆ๋‹ค์— $emit() ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฒ„์Šค, ๋˜๋Š” global state), ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋‹ต๋ณ€ํ•œ ์ˆ˜๋งŽ์€ ํฌ๋Ÿผ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋„ ์ด์— ๋Œ€ํ•ด ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฃผ๊ด€์ ์ธ ๊ฒฌํ•ด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ „์ฒด ํŒ€์ด "์ด๊ฒƒ์€ ์šฐ๋ฆฌ ๊ฒฝํ—˜์ƒ ํ•ญ์ƒ ์—ด๋“ฑํ•œ ์†”๋ฃจ์…˜"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํ•ต์‹ฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ์„ ๊ฐฑ์‹ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์ด ๋‹น์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€์ฃผ์˜ํ•˜์ง€ ์•Š๋„๋ก "๋ณดํ˜ธ"ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋””๊นŒ์ง€ ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋ฌผ๋ก  ๋ฏธ๋ฌ˜ํ•œ ์งˆ๋ฌธ์ด๋ฉฐ ์ฐพ๊ธฐ ์–ด๋ ค์šด ๊ท ํ˜•์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํŒ๋‹จํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถ€๋ชจ์—๊ฒŒ ์ง๊ณ„ ์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” $emit()๋„ ์‹ค์ œ ์ถ”๊ฐ€ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ •์งํ•œ ์งˆ๋ฌธ(์ €๋Š” Vue๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—), ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ฒด์ธ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ $emitํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋„ˆ๋ฌด ์งœ์ฆ๋‚˜๋„ค์š”.

์ง์ ‘์ ์ธ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— $emit() ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊นŠ์ด ์ค‘์ฒฉ๋œ ์ž์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌผ๋ก  ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด์•ผ ํ•˜์ง€๋งŒ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์ค‘์ฒฉ๋œ ์ž์‹์— ๊ฑธ์ณ ํŒŒ๊ฒฌ๋˜๋Š” ์ƒํ™ฉ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜๋ณด๋‹ค ์„ ํ˜ธ๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ•˜๊ฑฐ๋‚˜ ์ œ์‹œํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” "๊ธ€๋กœ๋ฒŒ ๋ฒ„์Šค" ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋‚จ๊ฒจ๋‘๊ณ  ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์•ˆ๋‚ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ "์กฐ์ข…ํ•˜๋ ค๊ณ "ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹น์‹ ์˜ ์‚ถ์„ ์กฐ๊ธˆ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค - ๋‹น์‹ ์€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ๋™์ผํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์œ ์‚ฌํ•œ ๋™์ž‘์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์•„์ฃผ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์—๊ฒŒ $emit() ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ ๋‹น์‹ ์˜ ๊ธธ์„ ์กฐ๊ธˆ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  Vue ์ธ์Šคํ„ด์Šค์— ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Vue.prototype.$bus = new Vue()
๋ญ”๊ฐ€๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ฑด์„ค์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...
๐Ÿ˜„ ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@posva

๋ชจ๋“  Vue ์ธ์Šคํ„ด์Šค์— ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Vue.prototype.$bus = new Vue()

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ๊ฝค ๋˜‘๋˜‘ํ•˜๋‹ค.

๋ฌด์–ธ๊ฐ€๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ฑด์„ค์ ์ด์ง€ ์•Š๋‹ค

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ ์–ด๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ฝค ์œ ํšจํ•œ ๊ธฐ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๊ทธ ์ž๋ฆฌ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜„ ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ง์€, ๋‚ด๊ฐ€ ์ •๋ง๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ ์–ธํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ๋‚ด ์š”์ ์„ ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ญ”๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์œ ์šฉํ•œ ๊ฒƒ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฝค ํ‘œ์ค€์ ์ธ ๊ฒƒ์ด๋ฉฐ ์ด๋ฒคํŠธ ๋ฒ„์Šค ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์ž๋Š” ์ ์–ด๋„ ๋‚˜์—๊ฒŒ ์ผ์ข…์˜ ์ผ์ข…์˜ ์•„๋ฌด๋ฆฌ ๋ด๋„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ํž™์Šคํ„ฐ์˜ ์˜์—ญ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜. ๐Ÿ˜„

๋ฌผ๋ก  ๋‚˜๋Š” ๊ทธ ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€์— ๋Œ€ํ•ด ๋†๋‹ด์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๋‚ด๊ฐ€ ์ „์— ๋งํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ๊ทธ๋“ค์˜ ์šฉ๋„๋ฅผ ๋ณด๊ณ  ํ™•์‹คํžˆ ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•  ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Ember๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•œ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ์ž์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” "์„œ๋น„์Šค"๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณ ์˜๋กœ ๊ณ ์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๋ทฐ๋ฅผ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚œ ๊ทธ๋ƒฅ _์‚ฌ๋ž‘_ํ•˜๊ณ  ์‹ถ์–ด, ์•Œ์ง€?

๋˜ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ $emitํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ:

<div>
  <a-button @click="modalShown = true">Open modal</a-button>
  <a-modal v-if="modalShown">
    <a-button @click="modalShown = false">Close modal</a-button>
  </a-modal>
</div>

a-modal a-modal ๋ฐ ๋‘ ๊ฐœ์˜ a-button ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์˜ "์ง์ ‘ ๋…ผ๋ฆฌ์  ์ž์‹"์ด๊ธฐ ๋•Œ๋ฌธ์— a-modal ๊ตฌ์„ฑ ์š”์†Œ๋Š” a-button ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค a-modal , ์ค‘์ฒฉ์ด ์žˆ๋Š” ๋ณต์žกํ•œ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ .

๋‚˜๋Š” ์ง€๊ธˆ ์ด ์‹œ์ ์—์„œ ๋‚˜ ์ž์‹ ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์–ด๋–ป๊ฒŒ๋“  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋…ผ์˜๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ๋“  ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฝค ํ‘œ์ค€์ ์ด๊ณ  ์‹ค์šฉ์ ์ธ ๊ฒƒ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์„ ์–ธ๊ธ‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ”์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ์ œ๊ฒŒ๋Š” ์ด์ƒํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

@LinusBorg :

์Œ, ์š”์ ์€ ํŒ€์˜ ๋ˆ„๊ตฌ๋„ $dispatch()์˜ ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ง€์ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ณ ์†๋„๋กœ ์ถœ๊ตฌ๋ฅผ ๋‹ซ์ง€ ๋ง์•„์•ผ ํ•  ์ด์œ ๋ฅผ ๋ฌป๋Š” ํ† ๋ชฉ ๊ธฐ์‚ฌ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค. "์ด ๊ฒฝ์‚ฌ๋กœ๋Š” ๊ต์ฐจ๋กœ๋กœ ์ด์–ด์ ธ ์‚ฌ๋žŒ๋“ค์ด ์ขŒํšŒ์ „ํ• ์ง€ ์šฐํšŒ์ „ํ• ์ง€ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๋ช‡ ๋…„ ๋™์•ˆ ์ด๊ณณ์—์„œ ์‚ด์•„์™”๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์„ ์•Œ์ง€๋งŒ ์ƒˆ๋กœ์šด ์‹œ๋ฏผ์€ ์ข…์ข… ๋ช‡ ๋…„ ๋™์•ˆ ๊ธธ์„ ์žƒ์Šต๋‹ˆ๋‹ค. ๋ถ„์ด๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."

"์ข‹์•„์š”. ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ‹์ง‘๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง„์ž…๋กœ๊นŒ์ง€ 10km๋งŒ ๋” ์ด๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

:) ๋‹ต๋ณ€ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ํ† ๋ก ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ข‹์€ ํŒ€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ณ ์†๋„๋กœ ์ถœ๊ตฌ๋ฅผ ๋‹ซ์ง€ ๋ง์•„์•ผ ํ•  ์ด์œ ๋ฅผ ๋ฌป๋Š” ํ† ๋ชฉ ๊ธฐ์‚ฌ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค. "์ด ๊ฒฝ์‚ฌ๋กœ๋Š” ๊ต์ฐจ๋กœ๋กœ ์ด์–ด์ ธ ์‚ฌ๋žŒ๋“ค์ด ์ขŒํšŒ์ „ํ• ์ง€ ์šฐํšŒ์ „ํ• ์ง€ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๋ช‡ ๋…„ ๋™์•ˆ ์ด๊ณณ์—์„œ ์‚ด์•„์™”๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์„ ์•Œ์ง€๋งŒ ์ƒˆ๋กœ์šด ์‹œ๋ฏผ์€ ์ข…์ข… ๋ช‡ ๋…„ ๋™์•ˆ ๊ธธ์„ ์žƒ์Šต๋‹ˆ๋‹ค. ๋ถ„์ด๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."

๋‚ด ๋‚˜์œ ๋น„์œ ๋„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :) ๋‚ด ๊ฒฌํ•ด๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • "์ด ๋„๋กœ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐ๋ณด๋‹ค ๋นจ๋ฆฌ ๊ฒฝ์ฃผํ•˜๋„๋ก ๋ถ€์ถ”๊น๋‹ˆ๋‹ค. ์†๋„ ์ œํ•œ์€ ๊ฑฐ์˜ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์†๋„๋ฅผ ์ค„์ด๋„๋ก ๋ฒ”ํผ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."
  • "ํ•˜์ง€๋งŒ ๊ณผ์†์œผ๋กœ ๋ชฉ์ ์ง€์— ๋นจ๋ฆฌ ๋„์ฐฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”!"
  • "๋ฌผ๋ก , ๋ช‡ ๋ฒˆ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” 1.5๋…„ ์ด์ƒ ๋™์•ˆ ๋„๋กœ์˜ ์ด ๋ถ€๋ถ„์„ ์ง€์†์ ์œผ๋กœ ๊ด€์ฐฐํ–ˆ์œผ๋ฉฐ ์‚ฌ๊ณ ์˜ ์–‘๊ณผ ๋‹ค์Œ ์˜คํ”„ ๋žจํ”„๋ฅผ ๋†“์น˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋‹จ์ˆœํžˆ ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
  • "ํ•˜์ง€๋งŒ ๋‚œ ๊ทธ ๋ฒ”ํผ๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„!"
  • ์Œ, ๋ชฉ์ ์ง€์˜ 99%์— ๋Œ€ํ•ด ์ด ๋‹ค๋ฅธ ๋„๋กœ๋Š” ๋ฒ”ํผ ์ด์ „์˜ ๋„๋กœ๋งŒํผ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ด ๋„๋กœ๋ฅผ ์ด์šฉํ•˜์„ธ์š”.
  • "ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ด ๋‹ค๋ฅธ ๊ธธ์„ _์ข‹์•„ํ•˜์ง€__ ์•Š์•„์š”! ์ „๋ง์ด ์ข‹์ง€ ์•Š์•„์š”!"
  • ...

๋ฌด์–ธ๊ฐ€๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๊ฑด์„ค์ ์ด์ง€ ์•Š๋‹ค

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ ์–ด๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ฝค ์œ ํšจํ•œ ๊ธฐ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๊ทธ ์ž๋ฆฌ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— @posva ๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. "๋‚˜๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค"๋Š” ๊ฒƒ์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ๋•Œ ๊ฑด์„ค์ ์ธ ์ฃผ์žฅ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์  ์ทจํ–ฅ ๋Œ€์‹  ๋…ผ์˜ํ•  ํƒ€๋‹นํ•˜๊ณ  ์‹ค์ œ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ณ„์† ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๋‹น์‹ ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ข‹์€ ๊ณ ์†๋„๋กœ๋ฅผ ํญํŒŒํ•˜๊ณ  ๊ณ ๋ฌด ์•„์ŠคํŒ”ํŠธ๋กœ ๋‹ค๋ฅธ ๊ณ ์†๋„๋กœ๋ฅผ ๊ฑด์„คํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹น์‹ ์ด ์–ด๋””์„ ๊ฐ€ ๊ฝค ๊น”๋”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ 10km๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. :)

์˜ˆ์ œ ์ •๋ณด: ์žฌ๊ท€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์›๋ž˜ ์งˆ๋ฌธ์— ๊ฒŒ์‹œ๋œ ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ํฌ์ฐฉ๋˜๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์ข‹์€ ์˜ˆ๊ฐ€ ์žˆ์„ ๋•Œ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ์ˆœ์„œ๋Œ€๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. $dispatch๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค

@posva ์ด์ „ ๋Œ“๊ธ€์—์„œ ์˜ˆ๋ฅผ

์˜ˆ์ œ ์ •๋ณด: ์žฌ๊ท€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์›๋ž˜ ์งˆ๋ฌธ์— ๊ฒŒ์‹œ๋œ ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ํฌ์ฐฉ๋˜๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์ข‹์€ ์˜ˆ๊ฐ€ ์žˆ์„ ๋•Œ ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ์ˆœ์„œ๋Œ€๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. $dispatch๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

$dispatch() ์™€ ํ•จ๊ป˜

// recursive-child
<template>
  <recursive-child></recursive-child>
  <button @click="dispatch">Do something</button>
<template>

<script>
  export default{
    methods: {
      dispatch() { this.$dispatch('do-something') }
    },
    events: {
      'do-something': function () { 
         // do something, or don't
         return true // nessessary to make the event bubble up further. Don't like the un-expressivness of this
       }
    }
  }
</script>

$emit() ์™€ ํ•จ๊ป˜

// recursive-child
<template>
  <recursive-child @do-something="doSomething"></recursive-child>
  <button @click="doSometing">Do something</button>
<template>

<script>
  export default{
    methods: {
      doSomething() {
        // do someting, or don't
        this.$emit('do-something')
      }
    }
  }
</script>

๊ทธ๊ฒŒ ์ •๋ง ๋” ๋‚˜์œ๊ฐ€์š”?

ํ•˜๋‚˜ ๋” ์žˆ์–ด์š”? :)

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€์ ์ด์ง€ ์•Š๊ณ  ์—ฌ์ „ํžˆ ๊ทธ๋ ‡๊ฒŒ ์ค‘์ฒฉ๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๊ดœ์ฐฎ์€. ์—ฌ๊ธฐ๊ฐ€ ์ƒˆ๋ฒฝ 5์‹œ์ธ๋ฐ ๋„ˆ ๋•๋ถ„์— ํž˜๋“  ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ผ ๊ฑฐ์•ผ. ๋‚˜์ค‘์— ๋” ์ข‹์€ ๋‚ด์šฉ์ด ์ƒ๊ฐ๋‚˜๋ฉด ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹น์ฒจ์ด ๋˜์…จ๊ฑฐ๋‚˜ ์ œ๊ฐ€ ๊ด€์‹ฌ์„ ์žƒ์œผ์…จ์„ ๊ฒ๋‹ˆ๋‹ค. :)

์žฌ๊ท€์ ์ด์ง€ ์•Š๊ณ  ์—ฌ์ „ํžˆ ๊ทธ๋ ‡๊ฒŒ ์ค‘์ฒฉ๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๋‹น์‹ ์€ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค @event= ๊ฐ ํ…œํ”Œ๋ฆฟ์— ๋ฆฌ์Šค๋„ˆ๋ฅผ $emit() , ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ์— ๋Œ€ํ•œ $dispatch() ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ์˜.

์ด๊ฒƒ์€ ์žฅํ™ฉํ•จ๊ณผ ํ‘œํ˜„๋ ฅ์„ ๊ฐ•์กฐํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์ข‹๊ฑฐ๋‚˜ ๋‚˜์˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  btw. ์ƒํ™ฉ์—์„œ ๋ถ€๋ชจ๊นŒ์ง€ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<child-comp @event="$emit('event', $arguments)>
  • ๋‹น์‹ ์€ ์ด๊ฒƒ์ด ๊ตฌ์„ฑ ์š”์†Œ ์‚ฌ์ด์— ์ˆ˜ํ–‰ํ•˜๋Š” "๊ฒฐํ•ฉ"์„ ์• ๋„ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํ‘œํ˜„๋ ฅ์— ์ฐฌ์‚ฌ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค
  • ๊ทธ ์™ธ์—๋Š” ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋งŽ์ง€๋งŒ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์—ฌ์ „ํžˆ ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๊ธ€๋กœ๋ฒŒ ์Šคํ† ์–ด์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๊ฐœ๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ๋…ผ์Ÿํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ์ข‹์€ ํ† ๋ก , ๋‹น์‹ ์˜ ๊ฐ€์น˜์žˆ๋Š” ์ž ์„ ์ฆ๊ธฐ์‹ญ์‹œ์˜ค.

@rhyek ์ฒ˜์Œ๋ถ€ํ„ฐ $dispatch ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ชฉํ‘œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ ์ ˆํ•œ ์œ ์ง€ ๊ด€๋ฆฌ๋กœ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ๋•Œ ์„ ํ˜ธ๋„๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์‹ค์šฉ์ ์ธ ์žฅ๋‹จ์ ์„ ๋‚˜์—ดํ•  ๋•Œ $dispatch ๋Š” ์—ด๋“ฑํ•œ ์†”๋ฃจ์…˜์ด๋ฏ€๋กœ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ DOM ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹ ๊ณผ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. "์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ๋‹ค"๋Š” ์ฃผ์žฅ์ด ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

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