-
React์์ Event Handler๋ ์ด๋ป๊ฒ ๋์ํ ๊น์?TECH 2024. 1. 11. 16:37
๋ชจ๋ฝ ์๋น์ค ๊ฐ๋ฐ ๋น์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ์ ์ด ์์์ต๋๋ค. ๋๋ฃ๋ถ๊ป์ ๋จ๊ฒจ ์ฃผ์ , ์ด๋ฒคํธ ์์ ๋์ <li> ๋ ธ๋๋ง๋ค ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ์์ ๋ํ ์ฝ๋ฉํธ์์ต๋๋ค.
์ ๋ ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ์ด๋ฒคํธ ์์์ ํ์ฉํด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํ ๋นํ ์ ์ด ๋จ์ฐ์ฝ ๋จ ํ ๋ฒ๋ ์์๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์ ์ ํ ์ ๊ทผ์ผ๋ก ๋๊ปด์ก์ต๋๋ค.
๋ฆฌ๋ทฐ๋ฐ์ ๋ถ๋ถ โฌ๏ธ
export default function MapModal() { const onClickAddressListItem = (e: Event) => { // ์๋ต }; return ( <dialog> {addressData.map((address) => ( <li onClick={onClickAddressListItem}>{์ฃผ์}</li> ))} </dialog> ); }
์ฝ๋ ๋ฆฌ๋ทฐ โฌ๏ธ
์ฝ๋ ๋ฆฌ๋ทฐ์์๋ ๋ฆฌ์กํธ์์ ๋ฑ๋กํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ฐ๋จํ๊ฒ ์กฐ์ฌํด ๋ณด๊ณ ๋์ด๊ฐ์ง๋ง, ์๋ฌธ์ด ๋๋ ๋ถ๋ถ์ด ๋จ์ ์์๊ธฐ ๋๋ฌธ์ ์ด ํฌ์คํ ์์ ๋ ์์ธํ ์์๋ณด๊ณ ์ ํฉ๋๋ค.
React์ 13635๋ฒ ์ด์์ ๋ฌ๋ฆฐ Dan abramov์ ๋ต๋ณ์ ๋ฐ๋ฅด๋ฉด ๋ฆฌ์กํธ์ ๋ชจ๋ ์ด๋ฒคํธ๋
document
์ ์ด๋ฒคํธ๋ฅผ ์์ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.No, we wouldn't expect this to meaningfully save memory.
> Given that React does attach event handlers to the nodes themselves
I think you might have misunderstood the answer. React doesn't attach your click event handlers to the nodes. It uses event delegation and listens at the document level.
The handler you're seeing attached is the same empty event handler and necessary to work around an iOS Safari issue.
๋ํ React 16 ๋ฒ์ ์์ 17 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ฉด์,
document
๊ฐ ์๋root DOM
(๋ฆฌ์กํธ๋ก ์ฑ์ ์์ฑํ๋ฉด ๋ง๋ค์ด์ง๋ ๊ฐ์ฅ ์์์ id๊ฐ root์ธ div)์ ์ด๋ฒคํธ๋ฅผ ์์ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
Browser API์ธ
getEventListeners
๋ก ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.id๊ฐ
root
์ธ ๋ ธ๋์ ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ฅผ ํ์ธํด ๋ณด๋ฉด, ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐroot
๋ ธ๋์ ์ด๋ฒคํธ ์์๋์ด ์ฒ๋ฆฌ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๊ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์,
onClick
์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ์์๋ฅผ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ดํด๋ณด๊ฑฐ๋getEventListeners
๋ก ํ์ธํด ๋ณด์์ ๋click
์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ฆฌ์กํธ์ 13625๋ฒ ์ด์์ ๋ฐ๋ฅด๋ฉด ์ด ๊ฐ๊ฐ์
li
์์์ ๋ฑ๋ก๋ ํธ๋ค๋ฌ๋ iOS Safari ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ๋ก๋ ๋น ๋ฆฌ์ค๋์ด๊ณ ,ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ชจ๋ ์ด๋ฒคํธ๋ ์์์ ์ค๋ช ํ ๊ฒ๊ณผ ๊ฐ์ด root DOM์ ์์๋ฉ๋๋ค.
(#13625 ์ด์๋ React 17 ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ฆ๋๊ธฐ ์ด์ ์ธ 2018๋ ์ ์์ฑ๋ ์ด์์ด๊ธฐ ๋๋ฌธ์ document๋ผ๊ณ ์ค๋ช ๋์ด ์์)
๋ค์ ํฌ์คํ ์์๋ ๋ฆฌ์กํธ์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์ค์ ๊ตฌํ ์ฝ๋๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ
React์ ์ด๋ฒคํธ ์์. ์ด๋ฒคํธ ์์(Event Delegation)์ ๋ค์์ ์์ ์์๋ฅผ… | by BitYoungjae | Medium
Event delegation in React · Issue #13635 · facebook/react
How event delegation works in React? · Issue #13625 · facebook/react
Should I use event delegation in React? - DEV Community
React v17.0 – React Blog'TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React Hook Form์ ์๋ก ๋น์ทํ ๊ธฐ๋ฅ๋ค์ ๋น๊ตํด ๋ณด์ (0) 2024.02.03 useState, ํด๋ก์ ๋ฅผ ํ์ฉํ์ฌ ๋์ํ๋ค๊ณ ? (0) 2024.01.27 Zero Runtime CSS-in-JS์ ๋ํด ์์๋ณด์ (1) 2024.01.06 React์์ TMap API ์ฌ์ฉํ๊ธฐ (1) 2023.12.30 ์ ์ ์์ ์ ์ src์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์๊น? (2) 2023.12.16