Skip to content

๐Ÿšฉ react ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ํˆดํŒ ๋งํ’์„  ๋„์šฐ๋ฉด์„œ ๋ฐฐ์šด์  ์ •๋ฆฌย #15

@leemember

Description

@leemember

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๊ฐ€์ง€๋‹ค

  1. ์Šคํฌ๋กค ์‹œ
  2. ์•„๋ฌด ๊ณณ ํด๋ฆญํ•  ๋•Œ

๊ทผ๋ฐ ์ž‘์—…ํ•˜๋ฉด์„œ ๋ฌธ์ œ์ ์ด ๋ฌด์—‡์ด๋ƒ๋ฉด,
๋ฉ”์ธํŽ˜์ด์ง€์— ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋‹ฌ์„ ํด๋ฆญํ•˜์—ฌ ๋‹ซ๊ฒŒ ๋  ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ์ผ์–ด๋‚˜์„œ ๋งํ’์„ ๊นŒ์ง€ ๋™์‹œ์— ์‚ฌ๋ผ์ง„๋‹ค.
๊ทธ๋ž˜์„œ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ๋•Œ์— close ๋˜๋Š” ์ด๋ฒคํŠธ ์ชฝ์—๋‹ค๊ฐ€ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ง‰์•„์ฃผ์—ˆ๋‹ค.

event.stopPropagation()
์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿฅ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด๋ž€ ?

์ด๋ฒคํŠธ๊ฐ€ ์—ฐ์†ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๋ธ” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.
์ž์‹ ์—˜๋ฆฌ๋จผํŠธ์—์„œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ์— ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ์— ํ• ๋‹น๋œ ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค.
๊ทธ๋ž˜์„œ ์ด ๊ฐ™์€ ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” e.stopPropagation() ์„ ์‚ฌ์šฉํ•ด์„œ ๋ง‰์•„์ฃผ๋ฉด ๋œ๋‹ค.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions