ref๋ฅผ ์ฌ์ฉํ๋ ์ด์
React๋ ์ ์ธ์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ํ์ props๋ฅผ ํตํด UI๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํ์ง๋ง ํน์ ์ํฉ์์๋ DOM ์์์ ์ง์ ์ ๊ทผํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ref๋ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ref๋ฅผ ์์ฑํด ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ฉด ์์์ DOM ์์(์ฌ๊ธฐ์๋ )๋ฅผ ๋ถ๋ชจ์์ ์กฐ์ํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
ref๋ฅผ ํตํด ํ ์ ์๋ ์์
_Icon ์ปดํฌ๋ํธ์ SVG ์์์ ref๋ฅผ ์ ๋ฌํ์ฌ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ํํ ์ ์๋ ์์
์ ์์์
๋๋ค.
๐ DOM ์์ฑ/์ํ ์กฐํ
- SVG ์์์ ํฌ๊ธฐ, ์์น, ์์ฑ ๋ฑ์ ํ์ธ.
- ์: ref.current.getBoundingClientRect()๋ฅผ ํธ์ถํด SVG์ ํ๋ฉด์ ์์น๋ ํฌ๊ธฐ๋ฅผ ํ์ธ.
- ์ฉ๋: ์ ๋๋ฉ์ด์ ์ด๋ ํดํ ์์น ๊ณ์ฐ.
๐ ์ง์ DOM ์กฐ์
- React ์ํ ์ธ๋ถ์์ SVG์ ์์ฑ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ.
- ์: ref.current.setAttribute('fill', 'red')๋ก ์์์ ๋ณ๊ฒฝ.
- ์ฉ๋: React๋ก ์ฒ๋ฆฌํ๊ธฐ ๋ณต์กํ ๋์ ์คํ์ผ๋ง.
๐ ์ ๋๋ฉ์ด์ ์ ์ด
- SVG ์์์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๊ฑฐ๋ ์ ์ด.
- ์: ref.current.animate()๋ฅผ ์ฌ์ฉํด CSS/SVG ์ ๋๋ฉ์ด์ ์ ํธ๋ฆฌ๊ฑฐ.
- ์ฉ๋: ์์ด์ฝ์ ํด๋ฆญ ์ ๊น๋นก์ด๋ ํจ๊ณผ ์ถ๊ฐ.
๐ ํฌ์ปค์ค ๊ด๋ฆฌ
- SVG ์์์ ํฌ์ปค์ค๋ฅผ ์ค์ ํ๊ฑฐ๋ ํ์ธ.
- ์: ref.current.focus()๋ก ์ ๊ทผ์ฑ ๊ฐ์ .
- ์ฉ๋: ํค๋ณด๋ ๋ด๋น๊ฒ์ด์ ์ง์.
๐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉ
- D3.js, GSAP ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ DOM ์์๋ฅผ ์ง์ ์กฐ์ํด์ผ ํ ๋.
- ์: ref.current๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๋ฌํด SVG ๊ฒฝ๋ก ์ ๋๋ฉ์ด์ ์ ์ฉ.
- ์ฉ๋: ๋ณต์กํ ์๊ฐํ ์์ .
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ํน์ DOM ์ด๋ฒคํธ(์: ๋ง์ฐ์ค ์ค๋ฒ, ๋๋๊ทธ)๋ฅผ ์ง์ ๊ฐ์ง.
- ์: ref.current.addEventListener('mouseover', handleMouseOver).
- ์ฉ๋: React์ ํฉ์ฑ ์ด๋ฒคํธ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ.
๐ ์์
import React, { useRef, useEffect } from 'react'; import { _ICon } from './IcArrowLeft'; const ParentComponent = () => { const svgRef = useRef(null); useEffect(() => { if (svgRef.current) { // SVG ์์์ ์ ๊ทผํ์ฌ ์์ ์ํ console.log('SVG ํฌ๊ธฐ:', svgRef.current.getBoundingClientRect()); // ์: ์์ ๋ณ๊ฒฝ svgRef.current.setAttribute('fill', 'purple'); // ์: ํด๋ฆญ ์ด๋ฒคํธ ์ถ๊ฐ svgRef.current.addEventListener('click', () => { alert('SVG ํด๋ฆญ๋จ!'); }); } }, []); return ( <div> <_ICon ref={svgRef} size={32} color="blue" filled={true} aria-label="์ผ์ชฝ ํ์ดํ" /> </div> ); }; export default ParentComponent;
- React ์ฒ ํ ์ค์: React๋ DOM ์ง์ ์กฐ์์ ์ต์ํํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด ์ํ/props๋ก UI๋ฅผ ๊ด๋ฆฌํ์ธ์.
- ์ ์ ํ ์ฌ์ฉ: ref๋ ํฌ์ปค์ค ๊ด๋ฆฌ, ์ ๋๋ฉ์ด์ , ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ ๋ฑ ํ์์ ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ์ธ์.
- ์ ๊ทผ์ฑ ๊ณ ๋ ค: SVG์ aria-label ๊ฐ์ ์์ฑ์ ์ถ๊ฐํด ์ ๊ทผ์ฑ์ ์ ์งํ์ธ์.
- ref ์ ๋ฌ ๋ฐฉ์: _ICon React.forwardRef๋ก ๋ํ๋์ด ์์ด์ผ ref๊ฐ SVG ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋ฉ๋๋ค.