# ์ด๋ฒคํธ ๋ฐ์ - setup() Vue 3
์ด๋ฒคํธ ๋ฐ์(event emit)์ ํ์ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ํธ๋ฅผ ๋ณด๋ด๋ ์ปดํฌ๋ํธ ํต์ ๋ฐฉ์์ ๋๋ค. ์ปดํฌ์ง์ ์์๋ ์ด๋ป๊ฒ ์ปดํฌ๋ํธ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
# ์ปดํฌ๋ํธ ์ด๋ฒคํธ ๋ฐ์
๊ธฐ์กด์ ์ธ์คํด์ค ์ต์ ์์ฑ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์ $emit() API์์ต๋๋ค.
<script>
export default {
methods: {
changeTitle() {
this.$emit('change');
}
}
}
</script>
์ ์ฝ๋๋ ํ์ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก change
์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋ ์ฝ๋์
๋๋ค. ์ด์ฒ๋ผ $emit()
API๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
# setup()์์ ์ปดํฌ๋ํธ ์ด๋ฒคํธ ๋ฐ์์ํค๊ธฐ
์ด๋ฒ์ setup()
ํจ์์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
<script>
export default {
setup(props, context) {
context.emit('change');
}
}
</script>
์ ์ฝ๋๋ setup()
ํจ์์ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ context
๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ์ฝ๋์
๋๋ค. setup()
ํจ์์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ํ๋กญ์ค ์์ฑ์ ์๋ฏธํ๊ณ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ emit
์ ๋น๋กฏํ์ฌ attrs, slots, expose ๋ฑ์ ๊ฐ์ง ์ปจํ
์คํธ ๊ฐ์ฒด(Context Object) (opens new window)๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด context.emit()
์ ๊ธฐ์กด $emit()
์ ์ฌ์ฉ๋ฒ์ด ๋์ผํฉ๋๋ค. ๋จ์ํ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ผ ์๋ ์๊ณ ์๋์ ๊ฐ์ด ์ด๋ฒคํธ์ ์ธ์๋ฅผ ๋๊ธธ ์๋ ์์ต๋๋ค.
context.emit('change'); // change ์ด๋ฒคํธ๋ง ๋ฐ์
context.emit('change', 100); // change ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ ์ธ์ 100์ ๊ฐ์ด ๋๊น
# ์ด๋ฒคํธ ๋ฐ์์ ๋์คํธ๋ญ์ฒ๋ง ๋ฌธ๋ฒ
context.emit()
์ ๋ค์๊ณผ ๊ฐ์ด ๋์คํธ๋ญ์ฒ๋ง ๋ฌธ๋ฒ์ ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
<script>
export default {
setup(props, { emit }) {
emit('change');
}
}
</script>
์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ props
๋ ๋์คํธ๋ญ์ฒ๋ง์ ์ผ์ ๋ ๋ฐ์์ฑ์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ์ง๋ง, emit
์ ๋ฐ์์ฑ์ด ์ฃผ์
๋ ๊ฐ์ด ์๋๋ผ ๋จ์ํ ํธ์ถ๋ง ํ๋ API์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์์ฑ์ด ์ ๊ฑฐ๋๋ ๋ถ๋ถ์ ๊ฑฑ์ ํ์ง ์์๋ ๋ฉ๋๋ค.