Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Hoonshi님의 블로그

SVG를 리액트 컴포넌트로 사용하기 본문

코딩공부

SVG를 리액트 컴포넌트로 사용하기

Hoonshi 2025. 4. 13. 03:18

아이콘이나 로고 같은 벡터 이미지를 동적으로 스타일링하거나 상호작용을 추가하고 싶을 때 SVG를 컴포넌트화하여 편하게 사용할 수 있습니다.

 

import Logo from './assets/Logo.svg?react'; //기본 svg에 ?react 추가

function App() {
  return (
    <div>
      {/* 일반 React 컴포넌트처럼 사용 가능 */}
      <Logo width={50} height={50} className="my-logo" />
    </div>
  );
}

 

?react의 작동 원리

?react 쿼리 파라미터를 사용하면 Vite는 내부적으로 SVGR을 사용하여 SVG 파일을 React 컴포넌트로 변환합니다. 이 과정에서 다음과 같은 일이 일어납니다:

SVG 파일의 XML 코드를 분석합니다.

  1. SVG 요소를 JSX로 변환합니다.
  2. 적절한 props를 전달할 수 있는 React 컴포넌트를 생성합니다.

SVG를 리액트 컴포넌트화 하여 사용하는 것의 장점

  1. React props를 통한 속성 제어 가능
  2. CSS-in-JS, styled-components 등과 함께 사용 가능
  3. 이벤트 핸들러 연결 가능
  4. React의 상태에 따라 동적으로 SVG 요소 변경 가능 (조건부 처리와 같이)

Vite에서 설정하기

Vite 프로젝트에서 ?react 쿼리를 사용하려면 vite-plugin-svgr 플러그인을 설치해야 합니다:

npm install vite-plugin-svgr --save-dev

그리고 Vite 설정 파일(vite.config.js 또는 vite.config.ts)에 다음과 같이 플러그인을 추가합니다:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr';

export default defineConfig({
  plugins: [react(), svgr()],
});

'코딩공부' 카테고리의 다른 글

페이지에 따라 UI 컴포넌트 렌더링 하기. (useLocation)  (0) 2025.04.19
React Router v6의 Hook에 대하여  (0) 2025.04.13
Toast 커스텀  (0) 2025.04.11
Feature Sliced Design 아키텍처  (0) 2025.04.08
Zod  (0) 2025.03.29