-
Notifications
You must be signed in to change notification settings - Fork 1
Description
react ๋ฉ์ธ ํ์ด์ง์์ SIMPLE ์๋น์ค ํดํ ๋งํ์ ๋์ฐ๋ฉด์ ๋ฐฐ์ด์ ์ ๋ฆฌ
// ์คํฌ๋กค ์ด๋ฒคํธ์ ํด๋ฆญ ์ด๋ฒคํธ ์คํ์ ๋งํ์ ์ฌ๋ผ์ง๋๋ก
useEffect(() => {
window.addEventListener('scroll', handleScroll);
window.addEventListener('click', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
window.removeEventListener('click', handleScroll);
};
}, []);
// ์คํฌ๋กค, ํด๋ฆญ ์ด๋ฒคํธ
const handleScroll = (e) => {
// ์คํฌ๋กค ์, ์๋ฌด๊ณณ ํด๋ฆญ์ simpleTip ๋งํ์ ์ฌ๋ผ์ง๊ฒ
if (window.scrollY >= 100 || onModal && (!el.current || !el.current?.contains(e.target))){
setOnModal(false)
}
};
useEffect๋ฅผ ์ฌ์ฉํด์ ์คํฌ๋กค ์ด๋ฒคํธ๋ click ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ๋ handleScroll ์ด๋ผ๋ ํจ์๊ฐ ๋์๋๋๋ก ํ๋ค.
๊ทธ๋์ useEffect ๊ธฐ๋ฅ๋ด์ ์๋ retrun ๊ฐ์ ํตํด cleanup ์์
๊น์ง ํ๋ค. (removeEventListener == ์ด๋ฒคํธ๋ฅผ ์ง์์ฃผ๋)
๊ทธ๋ฆฌ๊ณ ์๋น์ค ํดํ ๋งํ์ ์ด ์ฌ๋ผ์ง๋ ์กฐ๊ฑด์ 2๊ฐ์ง๋ค
- ์คํฌ๋กค ์
- ์๋ฌด ๊ณณ ํด๋ฆญํ ๋
๊ทผ๋ฐ ์์
ํ๋ฉด์ ๋ฌธ์ ์ ์ด ๋ฌด์์ด๋๋ฉด,
๋ฉ์ธํ์ด์ง์ ์ฒซ ๋ฒ์งธ๋ก ๋ํ๋๋ ๋ชจ๋ฌ์ ํด๋ฆญํ์ฌ ๋ซ๊ฒ ๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด ์ผ์ด๋์ ๋งํ์ ๊น์ง ๋์์ ์ฌ๋ผ์ง๋ค.
๊ทธ๋์ ์ฒซ ๋ฒ์งธ๋ก ๋ํ๋๋ ๋ชจ๋ฌ์ ๋ซ์ ๋์ close ๋๋ ์ด๋ฒคํธ ์ชฝ์๋ค๊ฐ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ง์์ฃผ์๋ค.
event.stopPropagation()
์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
๐ฅ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋ ?
์ด๋ฒคํธ๊ฐ ์ฐ์ํ์ฌ ๋ฐ์ํ๋ ๋ฒ๋ธ ํ์์ ์๋ฏธํ๋ค.
์์ ์๋ฆฌ๋จผํธ์์ ์ด๋ฒคํธ ๋ฐ์ ์, ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ํด๋น ์ด๋ฒคํธ์ ํ ๋น๋ ๊ธฐ๋ฅ๋ ํจ๊ป ์คํ๋๋ค.
๊ทธ๋์ ์ด ๊ฐ์ ํ์์ ๋ง๊ธฐ ์ํด์๋ e.stopPropagation() ์ ์ฌ์ฉํด์ ๋ง์์ฃผ๋ฉด ๋๋ค.