๐Ÿ”ฅ Trouble Shooting - ๋ชจ๋‹ฌ์ด ์ฒซ ํด๋ฆญ์— ๋ฐ”๋กœ ๋‹ซํ˜€๋ฒ„๋ฆฌ๋Š” ๋ฏธ์Šคํ„ฐ๋ฆฌ ํ•ด๊ฒฐ๊ธฐ

์Š˜ยท2025๋…„ 4์›” 29์ผ

๐Ÿ”ฅ Trouble Shooting

๋ชฉ๋ก ๋ณด๊ธฐ
15/23

๐Ÿ” ๋ฌธ์ œ ํ˜„์ƒ

  • ๊ณต์œ ํ•˜๊ธฐ ๋ชจ๋‹ฌ์„ ์ฒ˜์Œ ํด๋ฆญํ•  ๋•Œ ๋ชจ๋‹ฌ์ด ๋ฐ”๋กœ ๋‹ซํžˆ๋Š” ํ˜„์ƒ ๋ฐœ์ƒ
  • ๋‘ ๋ฒˆ์งธ ์ดํ›„ ํด๋ฆญ๋ถ€ํ„ฐ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ถˆ๊ทœ์น™ํ•œ ๋™์ž‘

๐Ÿงช ์›์ธ ๋ถ„์„

1. ๋ชจ๋‹ฌ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ƒํƒœ ๊ด€๋ฆฌ ์ถฉ๋Œ

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์ƒํƒœ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•จ
    • useSaveShareModalStore (๊ณต์œ  ๋ชจ๋‹ฌ ์ „์šฉ ์ƒํƒœ)
    • useCommonModalStore (๊ณตํ†ต ๋ชจ๋‹ฌ UI ์ƒํƒœ)
  • ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ๊ฐ ์ €์žฅ์†Œ์˜ ์—…๋ฐ์ดํŠธ ์‹œ์  ์ฐจ์ด๋กœ ์ธํ•œ ์ถฉ๋Œ ๋ฐœ์ƒ

2. useEffect์˜ cleanup ํ•จ์ˆ˜ ๋ฌธ์ œ

useEffect(() => {
  if (isOpen && cardId) {
    openCommonModal({ ... });
  } else {
    closeCommonModal();
  }

  // ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ ์‹œ ๋ชจ๋‹ฌ ๋‹ซ๊ธฐ
  return () => {
    if (isOpen) {  // ์ด ์กฐ๊ฑด์ด ๋ฌธ์ œ!
      closeCommonModal();
      close();
    }
  };
}, [...]);
  • React ์ƒ๋ช…์ฃผ๊ธฐ ํŠน์„ฑ์ƒ, ์ƒํƒœ ๋ณ€ํ™”๋กœ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ์ด์ „ useEffect์˜ cleanup ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋จ
  • ์ฒซ ํด๋ฆญ ์‹œ:
    1. isOpen์ด false์—์„œ true๋กœ ๋ณ€๊ฒฝ
    2. ์ƒํƒœ ๋ณ€ํ™”๋กœ ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ
    3. ์ด์ „ useEffect์˜ cleanup์ด ๋จผ์ € ์‹คํ–‰๋จ (isOpen์€ ์—ฌ์ „ํžˆ true)
    4. cleanup์—์„œ closeCommonModal()๊ณผ close() ์‹คํ–‰๋˜์–ด ๋ชจ๋‹ฌ์ด ๋‹ซํž˜
    5. ์ƒˆ useEffect ์‹คํ–‰ ์‹œ์ ์—์„œ ๋ชจ๋‹ฌ์€ ์ด๋ฏธ ๋‹ซํ˜€ ์žˆ์Œ

3. ์ƒํƒœ ๋™๊ธฐํ™” ๋ถ€์žฌ

  • CommonModalStore์™€ SaveShareModalStore ๊ฐ„์˜ ์ƒํƒœ ๋™๊ธฐํ™” ๋กœ์ง์ด ์—†์–ด์„œ ๋‘ ์ƒํƒœ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ๋ชจ๋‹ฌ ์ดˆ๊ธฐํ™” ์ƒํƒœ ์ถ”์ 

const [modalInitialized, setModalInitialized] = useState(false);
  • ๋ชจ๋‹ฌ์ด ์ •์ƒ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ ์ถ”๊ฐ€

2. ์กฐ๊ฑด๋ถ€ ๋ชจ๋‹ฌ ๊ด€๋ฆฌ ๋กœ์ง ๊ฐœ์„ 

// cardId๊ฐ€ ์—†๊ฑฐ๋‚˜ isOpen์ด false๋ฉด ๋ชจ๋‹ฌ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ
if (!isOpen) {
  if (modalInitialized) {
    closeCommonModal();
    setModalInitialized(false);
  }
  return;
}

// cardId๊ฐ€ ์žˆ๊ณ  isOpen์ด true์ธ ๊ฒฝ์šฐ๋งŒ ๋ชจ๋‹ฌ ์ฒ˜๋ฆฌ
if (cardId && isOpen) {
  openCommonModal({ ... });
  setModalInitialized(true);
}
  • ๋ช…ํ™•ํ•œ ์กฐ๊ฑด๋ถ€ ๋กœ์ง์œผ๋กœ cleanup ํ•จ์ˆ˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘ ๋ฐฉ์ง€

3. ์–‘๋ฐฉํ–ฅ ์ƒํƒœ ๋™๊ธฐํ™” ์ถ”๊ฐ€

// CommonModal ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ถ”๊ฐ€
const commonModalIsOpen = useCommonModalStore((state) => state.isOpen);

// CommonModal์ด ๋‹ซํž ๋•Œ SaveShareModal ์ƒํƒœ๋„ ์—…๋ฐ์ดํŠธ
useEffect(() => {
  if (!commonModalIsOpen && isOpen && modalInitialized) {
    close();
    setModalInitialized(false);
  }
}, [commonModalIsOpen, isOpen, close, modalInitialized]);
  • CommonModalStore์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ SaveShareModalStore์™€ ๋™๊ธฐํ™”

4. ๋ถˆํ•„์š”ํ•œ cleanup ๋กœ์ง ์ œ๊ฑฐ

  • ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์˜€๋˜ useEffect cleanup์—์„œ ๋ชจ๋‹ฌ์„ ๋ฌด์กฐ๊ฑด ๋‹ซ๋Š” ๋กœ์ง ์ œ๊ฑฐ
  • ๋Œ€์‹  ์ƒํƒœ์— ๋”ฐ๋ผ ์กฐ๊ฑด๋ถ€๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝ

๐Ÿ“š ๊ตํ›ˆ

๋‹ค์ค‘ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ 

  • ์—ฌ๋Ÿฌ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒํƒœ ๊ฐ„ ๋™๊ธฐํ™” ๋กœ์ง์ด ํ•„์ˆ˜์ 
  • ํŠนํžˆ ๋ชจ๋‹ฌ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ด€์—ฌํ•˜๋Š” UI ์š”์†Œ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์— ๋” ์ฃผ์˜ํ•ด์•ผ ํ•จ

useEffect cleanup ํ•จ์ˆ˜์˜ ์ •ํ™•ํ•œ ์ดํ•ด

  • cleanup ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ด์ „ useEffect์˜ cleanup์ด ์‹คํ–‰๋จ
  • cleanup์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด ๋‹ค์Œ ๋ Œ๋”๋ง ์‚ฌ์ดํด์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•ด์•ผ ํ•จ

์ƒํƒœ ๋ณ€ํ™” ๋””๋ฒ„๊น…์˜ ์ค‘์š”์„ฑ

  • React ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋‚˜ ๋กœ๊น…์„ ํ†ตํ•ด ์ƒํƒœ ๋ณ€ํ™” ์ˆœ์„œ์™€ ํƒ€์ด๋ฐ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

์œ„ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ํ†ตํ•ด ๋ชจ๋‹ฌ์˜ ์ฒซ ๋ฒˆ์งธ ํด๋ฆญ ์‹œ์—๋„ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€