๐ e.preventDefault()์ e.stopPropagation()์ ์์๋ณด์.
e.preventDefault()
์ e.stopPropagation()
์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ผ๋ ๊ณตํต์ ์ด ์์ง๋ง, ์ฐจ์ด์ ๋ ์๋ค.
e.preventDefault()
๋ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์์ด ๋ฐ์ํ์ง ์๋๋ก ํ๊ธฐ ์ํด ์ด๋ฒคํธ ๊ฐ์ฒด์์ ํธ์ถํ๋ method์ด๋ค. DOM์์๋ ์ ๋ง๋ค ๊ธฐ๋ณธ ๋์์ด ์๋ค. ์๋ฅผ ๋ค์ด anchor ํ๊ทธ๋ฅผ ํด๋ฆญํ๋ฉด href์ ์ง์ ๋ ๋งํฌ๋ก ์ด๋ํ๊ณ , <input type="checkbox" />
๋ฅผ ํด๋ฆญํ๋ฉด ์ฒดํฌ๋ชจ์์ด ์๊ธฐ๊ฑฐ๋ ์์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ form
ํ๊ทธ์์ submit
์ ํ๊ฒ๋๋ฉด refresh๊ฐ ์ผ์ด๋๋ค. ์ด๋ด ๋ e.preventDefault()
๋ฅผ ์ฌ์ฉํ๋ฉด ์ง์ ๋ ๋งํฌ๋ก ์ด๋ํ๊ฑฐ๋ ์ฒดํฌ๋ชจ์์ ์๊ธฐ๊ฑฐ๋ ์์ ๋ ๋์ ๊ทธ๋ฆฌ๊ณ refreshํ๋ ๋์์ ๋ฐฉ์งํ ์ ์๋ค. ์ฆ, ํด๋น ํ๊ทธ์ ๊ณ ์ ํ ์ด๋ฒคํธ ๋์์ ๋ฐฉ์งํ ์ ์๋ค.
์๋ ์์ ์์ input์ฐฝ์ ์ฑ์ฐ๊ณ submit์ ๋๋ฌ๋ณด์. e.preventDefault()
๊ฐ ์์ผ๋ฉด ์๋ก๊ณ ์นจ์ด ์๋ ๊ฒ์ด๊ณ , e.preventDefault()
๊ฐ ์์ผ๋ฉด ์๋ก๊ณ ์นจ์ด ๋ ๊ฒ์ด๋ค.(๋ง์ฝ, input์ฐฝ์ด ์ ์์ ์ผ๋ก ๋์ํ์ง ์๋๋ค๋ฉด ํฌ๋กฌ์ด ์๋ ํ ๋ธ๋ผ์ฐ์ (Safari, Firefox, Edge...)๋ก ์ ์ํ์. ๊ทธ๋ฆฌ๊ณ codePen embed์ console ํญ์ด ๋ณด์ด์ง ์์ผ๋ฉด ์ฌ๊ธฐ์์ ํ์ธํ์.)
See the e.preventDefault by @YWTechIT on CodePen.
e.stopPropagation()
๋ DOM tree๋ฅผ ํตํด ์ ํ(๊ตฌ์ฒด์ ์ผ๋ก ์บก์ณ๋ง/๋ฒ๋ธ๋ง ๋จ๊ณ)๋๋ ์ด๋ฒคํธ๋ฅผ ์ค์งํ๊ธฐ ์ํด ์ด๋ฒคํธ ๊ฐ์ฒด์์ ํธ์ถํ๋ method์ด๋ค. ์๋ฅผ ๋ค์ด ๋ถ๋ชจ๋ฅผ ๊ฐ๊ณ ์๋ ์์ element์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ๋ถ๋ชจ element๋ ์์ ์ด๋ฒคํธ๊ฐ ์ ํ๋๋๋ฐ, e.stopPropagation()
๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์์ ์๊ฒ ๋ฐ์ธ๋ฉ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ์คํํ๋๋ก ํ๊ณ , ๋ถ๋ชจ element์๊ฒ ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค. ์ถ๊ฐ๋ก ๋งํฌ๋ ๋ฒํผํด๋ฆญ ์ e.stopPropagation()
๋ฅผ ์ฌ์ฉํด๋ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์์ ์คํ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋๋ e.preventDefault()
๋ฅผ ํจ๊ป ์จ์ค์ผํ๋ค.
์๋ ์์ ์์ Click me!
๋ฒํผ์ ๋๋ ์ ๋์ console์ฐฝ๊ณผ e.stopPropagation()
๋ฅผ ์ฃผ์์ฒ๋ฆฌํ๊ณ Click me!
๋ฒํผ์ ๋๋ ์ ๋์ console์ฐฝ์ ๋น๊ตํด ๋ณด์. (console์ฐฝ์ด ๋ณด์ด์ง ์์ผ๋ฉด ์ฌ๊ธฐ์์ ํ์ธํ ์ ์๋ค.)
See the e.stopPropagation by @YWTechIT on CodePen.
์ฌ๋ด์ผ๋ก e.stopImmediatePropagation()
๋ฉ์๋๋ ๋์ผํ ์ด๋ฒคํธ ์ ํ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์ค๋๊ฐ ๋์ผํ element์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ด๋ฒคํธ Propagation์ ๋ฐฉ์งํ ์ ์๋ค. React์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์ ๊ณ ์ ์ด๋ฒคํธ์ธ nativeEvent ์ดํธ๋ฆฌ๋ทฐํธ์์ ์ฌ์ฉํด์ผํ๋ค. (e.nativeEvent.stopImmediatePropagation())
Reference
๋๊ธ