Home ๐Ÿ“ธ 2022-11-10
Post
Cancel

๐Ÿ“ธ 2022-11-10

๐Ÿ”ฅ ์˜ค๋Š˜ ์–ด๋””์— ๋„์ „ํ•ด๋ณด์…จ๊ณ , ๋ฌด์—‡์„ ๋ฐฐ์šฐ์…จ๋‚˜์š”?

๐ŸŒŠ ํ•™์Šตํ•˜์‹œ๋ฉด์„œ ๊ถ๊ธˆํ•˜์‹  ๋ถ€๋ถ„์ด๋‚˜, ์–ด๋ ค์› ๋˜ ์ ์€ ๋ญ˜๊นŒ์š”?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์œผ๋กœ SPA๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ History API์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • ์ง์ ‘ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” Web API CustomEvent๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

    • Event์™€ CustomEvent์˜ ์ฐจ์ด์ ์€ CustomEvent์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์—” ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฐ์ฒด์— detail์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๊ณ , ์ •๋ณด๋ฅผ ์ด๋ฒคํŠธ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    1
    2
    3
    4
    5
    6
    
    const newEvent = new CustomEvent("hello", { detail: { name: "์˜ˆ์€" } });
    
    // ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ์—” dispatchEvent(event)๋ฅผ ํ˜ธ์ถœํ•ด ์š”์†Œ์— ์žˆ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ˜๋“œ์‹œ '์‹คํ–‰โ€™์‹œ์ผœ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค
    // (dispatch๋Š” ์ผ์„ '์ฒ˜๋ฆฌํ•˜๋‹คโ€™๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„ ์˜์–ด๋‹จ์–ด์ž…๋‹ˆ๋‹ค โ€“ ์˜ฎ๊ธด์ด).
    // ์ด๋ ‡๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค˜์•ผ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ผ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    newEvent.dispatchEvent(newEvent);
    

    ๐Ÿ ์ฐธ๊ณ 

    ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ๋””์ŠคํŒจ์น˜ - ๋ชจ๋˜ JavaScript ํŠœํ† ๋ฆฌ์–ผ

  • ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ํ•˜๊ธฐ

    • ์•„๋ž˜ ์ฐธ๊ณ ํ•œ ํฌ์ŠคํŠธ๋Š” ๋ชจ๋‘ Intersection Observer API๋ฅผ ์ด์šฉํ•ด ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ฏธ์„ธํ•œ ์ฐจ์ด๋Š” ๊ด€์ฐฐ ๋Œ€์ƒ์„ ๋ฌด์—‡์œผ๋กœ ์ง€์ •ํ•˜๋Š๋ƒ๋‹ค. (1๏ธโƒฃ ํ˜„์žฌ ํ™”๋ฉด์—์„œ ๋ณด์ด๋Š” ๋ชฉ๋ก ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๊ด€์ฐฐ)ํ•  ๊ฒƒ์ธ์ง€ ํ˜น์€ (2๏ธโƒฃ ๋ชฉ๋ก ์š”์†Œ ํ•˜๋‹จ์— ๊ด€์ฐฐ์„ ์œ„ํ•œ ๋Œ€์ƒ์„ ๋ฏธ๋ฆฌ ์ •์˜)ํ•  ๊ฒƒ์ธ์ง€๋‹ค.
    • 1๏ธโƒฃ ํ˜„์žฌ ํ™”๋ฉด์—์„œ ๋ณด์ด๋Š” ๋ชฉ๋ก ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ul์˜ last-child๋ฅผ ๊ด€์ฐฐํ•˜๋‹ค๊ฐ€ ๋งŒ์•ฝ ๋ทฐํฌํŠธ ๋‚ด๋กœ ๋“ค์–ด์˜จ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์š”์†Œ appendํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋งจ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒˆ ์š”์†Œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด์„œ last-child๊ฐ€ ๊ฐฑ์‹ ๋œ๋‹ค. ์ฆ‰, ์›๋ž˜ ๊ด€์ฐฐํ•˜๋˜ last-child๋Š” ๋” ์ด์ƒ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ด€์ฐฐ์„ ์ค‘์ง€ํ•˜๊ณ  ์ƒˆ๋กœ์šด last-child๋ฅผ ๊ด€์ฐฐ ๋Œ€์ƒ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ๋ฃจํŠธ ์š”์†Œ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ƒˆ ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ด€์ฐฐ ๋Œ€์ƒ์„ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • 2๏ธโƒฃ ๋ชฉ๋ก ์š”์†Œ ํ•˜๋‹จ์— ๊ด€์ฐฐ์„ ์œ„ํ•œ ๋Œ€์ƒ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๋ ค๋ฉด ul ํƒœ๊ทธ ๋ฐ”๋กœ ๋‹ค์Œ์— ์ž„์˜์˜ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ์š”์†Œ๊ฐ€ ๋ฃจํŠธ ์š”์†Œ ๋‚ด๋กœ ๋“ค์–ด์˜ค๋Š”์ง€ ๊ณ„์† ๊ด€์ฐฐํ•œ๋‹ค. ul์˜ last-child๊ฐ€ ๋ฃจํŠธ ์š”์†Œ ๋‚ด๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด ๋ฐ”๋กœ ์•„๋ž˜์— ์œ„์น˜ํ•œ ๊ด€์ฐฐ ๋Œ€์ƒ๋„ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ ๋ชฉ๋ก์ด ๊ฐฑ์‹ ๋œ๋‹ค.

      ๐Ÿ ์ฐธ๊ณ 

      ๋ฐ”๋‹๋ผ JS๋กœ ๋ฌดํ•œ์Šคํฌ๋กค ๊ตฌํ˜„์„ ์œ„ํ•œ ๋ฒ ์ด์ง ๊ณต๋ถ€

      ์‹ค๋ฌด์—์„œ ๋Š๋‚€ ์ ์„ ๊ณ๋“ค์ธ Intersection Observer API ์ •๋ฆฌ

๐ŸŒŸ ๋‚ด์ผ์€ ์–ด๋–ป๊ฒŒ ํ•ด๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ธ์‚ฌ ์ •๋ณด SPA ๋ฆฌ๋‰ด์–ผ ๊ณผ์ œ ํ…Œ์ŠคํŠธ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ
  • ๊ทธ ์™ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณผ์ œ ํ…Œ์ŠคํŠธ ํ’€์–ด๋ณด๊ธฐ
This post is licensed under CC BY 4.0 by the author.

๐Ÿ“ธ 2022-11-07

๐Ÿ“ธ 2022-11-11