ํฐ์คํ ๋ฆฌ ๋ทฐ
ERROR
์ฌ์ด๋๋ฐ ๋ซ์ผ๋ฉด ์คํฌ๋กค์ด ๋งจ ์๋ก ์ฌ๋ผ๊ฐ๋ ๋ฒ๊ทธ ํด๊ฒฐ๊ธฐ (PrimeReact + Virtual Scroller)
ekki88 2025. 3. 24. 11:25๐จ๋ฌธ์
PrimeReact DataTable์์ *๊ฐ์ ์คํฌ๋กค(virtualScrollerOptions)*์ ์ฌ์ฉํ ๋,
์ฌ์ด๋๋ฐ๋ฅผ ์ด๊ณ ํน์ ํญ๋ชฉ์ ํด๋ฆญํ๋ฉด ํด๋น ์ธ๋ฑ์ค๋ก ์ ์ด๋๋๋ค.
ํ์ง๋ง ์ฌ์ด๋๋ฐ๋ฅผ ๋ซ์๋ค๊ฐ ๋ค์ ์ด๋ฉด,
ํ๋ฉด์ด ๋งจ ์๋ก ์ฌ๋ผ๊ฐ๋ค๊ฐ ์ ํ๋ ์ธ๋ฑ์ค๋ก ์คํฌ๋กค๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๐ฉ๐พ ์์ธ
- ๊ธฐ์กด์๋ ์ฌ์ด๋๋ฐ ์ฝํ ์ธ ๋ฅผ <div style="display: none" /> ์ผ๋ก ์จ๊ธฐ๊ณ ์์์
- display: none์ด ๋๋ฉด ๋ด๋ถ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋จ
- ๋ค์ ์ด์์ ๋ ์๋ก ๋ง์ดํธ๋๋ฏ๋ก, ์คํฌ๋กค ์์น๊ฐ ์ด๊ธฐํ๋จ →
ํญ์ 1๋ฒ๋ถํฐ ๋ค์ ๋ ๋๋ ๋ค ์คํฌ๋กค๋ก ์ด๋ํ๋ ๋ฒ๊ทธ ๋ฐ์
โ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
โ ๊ธฐ์กด ๋ฐฉ์
display: active ? "flex" : "none"
→ ๋ ๋๋ง ์์ฒด๋ฅผ ์ค๋จ์์ผ ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๊น
โ
์์ ํ ๋ฐฉ์
style={{
position: isActive ? "relative" : "absolute",
visibility: isActive ? "visible" : "hidden",
pointerEvents: isActive ? "auto" : "none",
opacity: isActive ? 1 : 0,
}}
→ ์ด๋ ๊ฒ ํ๋ฉด ์ปดํฌ๋ํธ๋ ์ ์ง๋๋ฉด์๋, ์๊ฐ์ ์ผ๋ก๋ง ์จ๊ฒจ์ง๋ ํจ๊ณผ๊ฐ ์๊น
→ ๋ค์ ์ด์์ ๋ ์คํฌ๋กค ์์น์ ๋ด๋ถ ์ํ๊ฐ ์ ์ง๋จ
๐จ ์ถ๊ฐ ๋ฌธ์ : InputSwitch๊ฐ ๋ฆ๊ฒ ์ฌ๋ผ์ง
PrimeReact์ InputSwitch๋ฅผ ์ฌ์ด๋๋ฐ ๋ด์์ ์ฌ์ฉ ์ค์ผ ๋,
์ฌ์ด๋๋ฐ๋ฅผ ๋ซ์ผ๋ฉด ๋ฒํผ์ด 0.5์ด ์ ๋ ๋ฆ๊ฒ ์ฌ๋ผ์ง๋ ์์ ํ์ ๋ฐ์
๐ฉ๐พ ์์ธ
- position: absolute, visibility: hidden ๋ฑ์ ์์๊ฐ ๋ณด์ด์ง ์๊ฒ๋ง ๋ง๋ค๊ณ , ๋ ๋๋ง์ ๊ณ์ ๋๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ์ ๋๋ฉ์ด์ ์ด ์ฌ์ ํ ์งํ๋จ
- InputSwitch์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋์ง์ ์ด ์ ์ฉ๋์ด ์์ด ์ํ ์ ํ ์์ ๋๋ ์ด๊ฐ ์๊น
โ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
opacity: isActive ? 1 : 0
- opacity๋ฅผ ์กฐ์ ํด ๋ถ๋๋ฝ๊ฒ ์ฌ๋ผ์ง๊ฒ ์ฒ๋ฆฌ
- ํธ๋์ง์
์ ๋ณ๋๋ก ์ง์ ํ์ง ์์๋,
InputSwitch ๋ด๋ถ ๊ธฐ๋ณธ ํธ๋์ง์ (0.2s ease) ๋๋ถ์
์์ฐ์ค๋ฝ๊ฒ ์ฌ๋ผ์ง๋ฉฐ ์์์ด ๋จ์ง ์์