Frontend๐ŸŽจ

handleClick vs handleClick() ์ •๋ฆฌ — React, Vue, JS onclick ์ด๋ฒคํŠธ ์ฐจ์ด

JanuDev 2025. 11. 3. 16:19

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 ์ธ๋ผ์ธ ํ‘œํ˜„์‹

  1. ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ ๋ฐฉ์‹ - @click="handleClick" : ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๋งŒ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ, Vue๊ฐ€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ methods ์†์„ฑ์—์„œ handleClick์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ํด๋ฆญ ์‹œ ์‹คํ–‰๋˜๋„๋ก ๋ฐ”์ธ๋”ฉ (Vue3 ์ด์ „์— methods๊ฐ€ ์žˆ์—ˆ์Œ). ๋”ฐ๋ผ์„œ ๋ Œ๋”๋ง ์‹œ์—๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์—๋งŒ ์‹คํ–‰. "๋‹จ์ˆœ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ"
  2. ์ธ๋ผ์ธ ํ‘œํ˜„ ๋ฐฉ์‹ - @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()์„ ์ง์ ‘ ์‹คํ–‰์‹œํ‚จ๋‹ค. 
    • ์„ฑ๋Šฅ: ๋ Œ๋”๋ง ์‹œ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ๋น„ํšจ์œจ์ ์ด์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ๋‹ค.

โž•์ต๋ช…ํ•จ์ˆ˜์˜ ํ˜•ํƒœ : function() {} , const fn = function() {} , const fn = () => {}์™€ ๊ฐ™์ด ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜

4. onClick๊ณผ onclick์˜ ์ฐจ์ด

์ด๊ฑด ๊ฐ„๋‹จํ–ˆ๋”ฐ.

onClick : React(JSX)

๋‚˜๋จธ์ง€ onclick : HTML / DOM(Vanilla JS)

+@click = Vue