click ์ด๋ฒคํธ๋ค์๊ฒ ๋ค์ํ ํํ๊ฐ ์๋๋ฐ ํท๊ฐ๋ ค์ ์ ๋ฆฌํ๋ ํฌ์คํธ๋น....
1. onclick = "handleClick" (๊ดํธ x) ๐ "ํจ์ ๊ทธ ์์ฒด(์ฐธ์กฐ)๋ฅผ ์ ๋ฌ
function handleClick() {
console.log('click!')
}
<button onClick={handleClick}>๋ฒํผ</button>
"ํด๋ฆญ๋๋ฉด handleClick()์ ์คํํด๋ผ"
= ๋ ๋๋ง์ ์คํ x, ํด๋ฆญํ ๋ ์คํ๋จ
โ HTML, Vanilla JS
- ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ ํ ๋ ์คํํ ์ฝ๋๋ก ์ ์ฅ
- <script> ํ๊ทธ๋ฅผ ํตํด ์ ์ญ์ผ๋ก ์ ์๋์ด ์์ ๋ 'ํด๋ฆญ ์ ์คํ'. ๋ฐ๋์ ์ ์ญ์ผ๋ก ์ ์ธ๋์ด์ผ ํจ = Window ๊ฐ์ฒด์์ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํจ!
- window ๊ฐ์ฒด : ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด๋ถ ๊ฐ์ฒด๋ก ๋ธ๋ผ์ฐ์ ์ฐฝ์ด ์ด๋ฆด ๋๋ง๋ค ํ๋์ฉ ๋ง๋ค์ด์ง๋ ๊ฐ์ฒด. ๋ธ๋ผ์ฐ์ ์ฐฝ ์์ ์กด์ฌํ๋ ๋ชจ๋ ์์๋ค์ ์ต์์ ๊ฐ์ฒด(์๋ต ๊ฐ๋ฅ - ๋๋ฌด ๋น์ฐํด์)
- ํ์ด์ง ๋ก๋์ ์คํ๋๋๊ฒ ์๋ ํด๋ฆญ ์์ ์์ ํธ์ถ๋จ
โ React, Vue
- React : onClick = {handleClick}์ผ๋ก ํํ๋จ. ํด๋ฆญ ์ ์คํ
- Vue: @click = "handleClick"ํํ๋ก ํํ๋จ, ์ปดํฌ๋ํธ์ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ์ฌ ํด๋ฆญ ์ ์คํ "๋ฉ์๋ ์ฐธ์กฐ ๋ฐฉ์"
- @ : Vue์์ v-on์ ์๋ฏธ(์ด๋ฒคํธ ์คํ์ ๋ด๋น)
2. onclick = "handleClick()" (๊ดํธ o)๐ "ํจ์๋ฅผ ์ฆ์ ์คํํ ๊ฒฐ๊ณผ๊ฐ(๋ฆฌํด๊ฐ)์ ์ ๋ฌ"
function handleClick() {
console.log('click!')
return 42
}
<button onClick={handleClick()}>๋ฒํผ</button>
๋ ๋๋ง ํ ๋ ์ด๋ฏธ "click!"์ ์ฝ์์ ํ๋ฒ ์ฐ๊ณ
42๊ฐ onClick ์์ฑ์ ๋ค์ด๊ฐ๋ค.
= ์ฆ ํด๋ฆญํด๋ ์๋ฌด ์ผ๋ ์์ผ์ด๋จ
โ HTML, Vanilla JS
- HTML ํ์ฑ ์ "handleClick()"์ด๋ผ๋ ๋ฌธ์์ด์ด onclick์์ฑ์ ์ ์ฅ๋๊ณ , ํด๋ฆญ ์ ๊ทธ ์ฝ๋(handleClick())๊ฐ ํ๊ฐ๋์ด ์คํ (์ ์์ ์ฐธ๊ณ )
- ๋๋ถ๋ถ์ JS์์๋ฅผ ๋ณด๋ฉด <div onclick="handleClick()"> ์ ํํ๋ก ๋์ด ์์
โ React, Vue
- React : onClick = {handleClick()}์ ํํ๋ก ์ฌ์ฉํ๋ฉฐ ๋ ๋๋ง ์ฆ์ ์คํ๋จ
- ํจ์์ ๋ฐํ๊ฐ์ด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ๋ฑ๋ก๋จ
- ๊ดํธ๊ฐ ํจ์ ํธ์ถ์ ์๋ฏธ
- ์๋์ ์ผ๋ก ๋ ๋๋ง ์ ํน์ ๋ก์ง์ ์คํํ๊ณ ์ถ์ ๋ ์ธ์๋ โ
- Vue : @click = "handleClick()" ํํ๋ก ์ฌ์ฉ
- "์ธ๋ผ์ธ ํํ์"์ผ๋ก ํ๊ฐ๋์ด ํด๋ฆญ ์ handleClick()์ ํธ์ถ
โ Vue์ ๋ฉ์๋ ์ฐธ์กฐ๋ฐฉ์ vs ์ธ๋ผ์ธ ํํ์
- ๋ฉ์๋ ์ฐธ์กฐ ๋ฐฉ์ - @click="handleClick" : ๋ฉ์๋์ ์ด๋ฆ๋ง ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ผ๋ก, Vue๊ฐ ํด๋น ์ปดํฌ๋ํธ์ methods ์์ฑ์์ handleClick์ด๋ผ๋ ํจ์๋ฅผ ์ฐพ์์ ํด๋ฆญ ์ ์คํ๋๋๋ก ๋ฐ์ธ๋ฉ (Vue3 ์ด์ ์ methods๊ฐ ์์์). ๋ฐ๋ผ์ ๋ ๋๋ง ์์๋ ๋ฐ์ํ์ง ์๊ณ ์ด๋ฒคํธ ๋ฐ์ ์์๋ง ์คํ. "๋จ์ ํด๋ฆญ ํธ๋ค๋ฌ"
- ์ธ๋ผ์ธ ํํ ๋ฐฉ์ - @click="handleClick()" : ํ ํ๋ฆฟ ์์์ JavaScript ํํ์์ ์ง์ ์คํํ๋ ๋ฐฉ์. ๋ฌธ์์ด ์์ ์ฝ๋๋ฅผ ํด๋ฆญ ์์ ์์ ํ๊ฐํ์ฌ ์คํ. ๋ ๋๋ง ์์ ์์ ๋ฐ์ํ์ง ์๊ณ , ํจ์ ํธ์ถ ๋ฟ ๋ง ์๋๋ผ ์กฐ๊ฑด๋ฌธ, ์ฐ์ฐ, ์ฌ๋ฌ ํํ์์ด ๊ฐ๋ฅํด์ง. ํด๋ฆญ ์ ์ด๋ฒคํธ ๋ฐ์ + ์ธ์ ์ ๋ฌ "๋งค๊ฐ๋ณ์ ์ ๋ฌ ํ์ํ ๋"
์ ๋ฆฌ
๐ HTML / Vanilla JS
<button onclick="handleClick">๋ฒํผ</button> <!-- X -->
<button onclick="handleClick()">๋ฒํผ</button> <!-- O -->
html์ ์ธ๋ผ์ธ์์ "handleClick"์ด ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ๋์ํ์ง ์๋๋ค. ์ฆ, HTML ์ฝ๋ ์์ ํจ์๋ฅผ ํธ์ถํ๋ ()๊ฐ ๋ฐ๋์ ํ์ํ๋ค.
HTML : handleClick()
ํ์ง๋ง JS ์ฝ๋๋ก ๋ฐ์ธ๋ฉํ ๋
button.onclick = handleClick; // ํด๋ฆญ ์ ์คํ๋จ โ
button.onclick = handleClick(); // ์ฆ์ ์คํ๋๊ณ ํด๋ฆญ ์ ์๋ฌด ์ผ ์์ โ
์ด๋ ๊ฒ ์คํ๋๋ค. React์ ๋์ผ
JS : handleClick
โ๏ธ React
<button onClick={handleClick}>๋ฒํผ</button> // ํด๋ฆญ ์ ์คํ โ
<button onClick={handleClick()}>๋ฒํผ</button> // ๋ ๋๋ง ์ ์คํ โ
React์ JSX์์ ์ค๊ดํธ {} ์์ ๋ด์ฉ์ JavaScript ํํ์์ผ๋ก ํ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ดํธ๋ฅผ ์ฐ๋ฉด ๋ ๋๋ง ์ ํจ์๊ฐ ํธ์ถ๋๋ค.
๋ฐ๋ผ์ ๊ดํธ ์์ด ์ฌ์ฉํด์ผ ํจ. ๊ฒฐ๊ณผ๊ฐ์ด ํจ์๊ฐ ์๋๋ผ๋ฉด ์๋ฌด ์ผ๋ ์์ผ์ด๋จ
React : handleClick
๐ฉ Vue
<!-- ๋ฉ์๋ ์ฐธ์กฐ -->
<button @click="handleClick">๋ฒํผ</button> <!-- ํด๋ฆญ ์ ์คํ โ
-->
<!-- ์ธ๋ผ์ธ ํํ์ -->
<button @click="handleClick()">๋ฒํผ</button> <!-- ํด๋ฆญ ์ ์คํ โ
-->
- @click="handleClick" → Vue๊ฐ methods์์ ํจ์๋ฅผ ์ฐพ์ “์ฐธ์กฐ”๋ก ๋ฑ๋ก.
- @click="handleClick()" → ํด๋ฆญ ์์ ์ ๊ทธ ํํ์์ ํ๊ฐ(handleClick() ์คํ).
Vue: handleClick, handleClick()
3. onClick={handleClick}๊ณผ onClick={handleClick()}๊ณผ onClick={()=>handleClick()}
๋ฆฌ์กํธ์์ onClick={๊ดํธ ์ ๋ฉ์๋}๋ก ํํํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ํํํ๋๊ฑด JSX๋ฐ์ ์๊ธฐ ๋๋ฌธ...
โ onClick={handleClick}
- ํด๋ฆญ ์ ์คํ '๊ฐ์ฅ ํ์ค์ ์ธ ํํ'
- ๋จ์ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ ๊ถ์ฅ.
- ์ ๋ฌ๋๋ ๊ฐ: ํจ์ ์ฐธ์กฐ. handleClick์ด๋ผ๋ ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํ๋ค.
- ์ฑ๋ฅ: ๊ฐ์ฅ ํจ์จ์ . ๋ ๋๋ง ์ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
โ onClick={handleClick()}
- ๋ ๋๋ง ์ฆ์ ์คํ
- ๋ ๋๋ง๋ง๋ค ํ๋ฒ์ฉ ์คํ(๋ฆฌ๋ ๋๋ง ์ ํ๋ฒ์ฉ ๋ ์คํ๋๋ค)
- ์ ๋ฌ๋๋ ๊ฐ: ํจ์์ ๋ฐํ ๊ฐ
- ์ฑ๋ฅ: N/A(์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก์ ๋ถ์ ํฉ)
โ onClick={() => handleClick()}
- ํด๋ฆญํ ๋ ์คํ
- ๋งค๊ฐ๋ณ์ ์ ๋ฌ. ๋ฐ๋ผ์ ๋ณดํต () => handleClick('๋๋ฃจํ ', 16) ์ด๋ฐ์์ผ๋ก ์ธ์๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ค.
- ์ ๋ฌ๋๋ ๊ฐ: ์๋ก์ด ํ์ดํ ํจ์. ์ต๋ช ํจ์๋ฅผ ์๋ก ๋ง๋ค์ด์, ๊ทธ ์์์ handleClick()์ ์ง์ ์คํ์ํจ๋ค.
- ์ฑ๋ฅ: ๋ ๋๋ง ์ ํจ์๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ๋นํจ์จ์ ์ด์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ์์ ๋๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
4. onClick๊ณผ onclick์ ์ฐจ์ด
์ด๊ฑด ๊ฐ๋จํ๋ฐ.
onClick : React(JSX)
๋๋จธ์ง onclick : HTML / DOM(Vanilla JS)
+@click = Vue