2025 . ์˜ค์€

repo

๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ ๋ฆฌ์…‹ ๋ฐฉ๋ฒ•

๐Ÿงจ ๋ฌธ์ œ ์ƒํ™ฉ

์ปดํฌ๋„ŒํŠธ ๋‚ด ๋“œ๋กญ๋‹ค์šด ํ•„ํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”(reset) ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฆฌ์…‹์„ ๊ตฌํ˜„ํ–ˆ์—ˆ์–ด์š”.

const [isReset, setIsReset] = useState(false);

const handleReset = () => {
  setKeyword("");
  setPage(1);
  setTarget(All);
  setIsReset(true);
  setTimeout(() => setIsReset(false), 1000);
};

<AdminDropdown
  isReset={isReset}
/>

โ—๋ฌธ์ œ์ 

  • setTimeout์œผ๋กœ ๋ฆฌ์…‹ flag๋ฅผ 1์ดˆ ๋’ค์— false๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ์ง€์ €๋ถ„ํ–ˆ์Œ
  • Dropdown ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ isReset์„ ๊ฐ์ง€ํ•ด setLabel, onValueChange ๋“ฑ์„ ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Œ
  • "๋ฆฌ์…‹"์˜ ์ฑ…์ž„์ด Dropdown ์™ธ๋ถ€์—์„œ๋„ ๋‚ด๋ถ€์—์„œ๋„ ๋ถ„์‚ฐ๋˜์–ด ์žˆ์–ด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๐Ÿ‘‰ ๋ฆฌ๋ Œ๋”๋ง์„ ์ด์šฉํ•œ ์ƒํƒœ ์ดˆ๊ธฐํ™”

isReset ๋Œ€์‹  key ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง

const [resetKey, setResetKey] = useState(0);

const handleReset = () => {
  setPage(1);
  setTarget(All);
  setGender(All);
  setAgeGroup(All);
  setKeyword("");
  setResetKey(prev => prev + 1);
};

return (
  <div>
    <AdminDropdown
      key={`target-${resetKey}`}
      defaultLabel="์ „์ฒด"
      dropdownMenus={filterTargetsDropdownMenus}
      onValueChange={handleValueChange}
    />
    <AdminDropdown
      key={`gender-${resetKey}`}
      defaultLabel="์„ฑ๋ณ„"
      dropdownMenus={filterGendersDropdownMenus}
      onValueChange={handleValueChange}
    />
    <AdminDropdown
      key={`age-${resetKey}`}
      defaultLabel="์—ฐ๋ น"
      dropdownMenus={filterAgeGroupsDropdownMenus}
      onValueChange={handleValueChange}
    />
  </div>
);

๐Ÿ’ก ๋ฐฐ์šด ์ 

  • key ๋ณ€๊ฒฝ์€ ๋ฆฌ์•กํŠธ๊ฐ€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์™„์ „ํžˆ ์–ธ๋งˆ์šดํŠธ โ†’ ๋ฆฌ๋งˆ์šดํŠธํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด Dropdown ๋‚ด๋ถ€ ์ƒํƒœ (useState, useEffect ๋“ฑ)๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ „ ๋ฐฉ์‹๋ณด๋‹ค ๊น”๋”ํ•˜๊ณ , reset ์ฑ…์ž„์„ ์™ธ๋ถ€์—์„œ๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์—ญํ• ์ด ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ด ๋ฐฉ์‹์ด ๋งค์šฐ ์œ ์šฉํ•˜๊ณ  ๊ฐ€๋ณ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

โœ๏ธ ์ธ์‚ฌ์ดํŠธ

React์˜ key๋ฅผ ๋‹จ์ˆœํ•œ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง ๊ตฌ๋ถ„์šฉ์ด ์•„๋‹ˆ๋ผ "๋ฆฌ์…‹ ํŠธ๋ฆฌ๊ฑฐ" ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ์ƒํƒœ ์ดˆ๊ธฐํ™”๋‚˜ UI ๋ฆฌ์…‹์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฑธ ์ƒˆ์‚ผ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.