SVG → JSX 변환기
원본 SVG 마크업을 React JSX로 변환하면서 속성을 camelCase로 바꾸고 빈 태그를 셀프 클로즈하며 선택적으로 타입이 붙은 컴포넌트로 감쌉니다.
SVG → JSX 변환기 — SVG 마크업을 붙여넣으면 React에 바로 쓸 수 있는 JSX를 즉시 얻습니다. stroke-width, fill-rule 같은 속성은 camelCase로 바뀌고 class는 className이 되며 빈 요소는 셀프 클로즈됩니다. 또한 결과를 SVGProps를 펼치는 함수 컴포넌트로 감싸 어떤 prop이든 받을 수 있게 하는 선택지도 있습니다. 모든 처리는 순수 문자열 변환으로 브라우저 안에서만 이뤄지며, 마크업이 페이지 밖이나 서버로 전송되지 않습니다.
SVG → JSX 변환기란?
SVG → JSX 변환기는 일반 SVG 마크업을 컴포넌트에 바로 붙여 넣을 수 있는 유효한 React JSX로 바꿔 주는 무료 브라우저 내 도구입니다. React는 DOM 속성을 camelCase(strokeWidth, clipPath, fillRule)로 요구하고 class 대신 className을 쓰기 때문에, 손으로 붙여넣은 SVG는 정리하기 전까지 경고를 내기 쉬운데 이 도구가 그 정리를 자동으로 해 줍니다. 프론트엔드 개발자와 디자이너는 Figma, Illustrator, 아이콘 세트에서 아이콘을 내보내 재사용 가능한 React 컴포넌트로 만들 때 사용합니다. '컴포넌트로 감싸기'를 켜면 이름 있는 함수 컴포넌트를 만들고, 'TypeScript props'를 켜면 React.SVGProps로 타입을 붙여 width, height, className, 이벤트 핸들러를 전달합니다.
SVG → JSX 변환기 사용법
- 맨 위의 SVG 입력 상자에 SVG 마크업을 붙여넣거나 입력하세요.
- 아래 출력 상자에서 변환된 JSX를 확인하세요. 속성은 camelCase로, class는 className으로 바뀌고 빈 태그는 자동으로 셀프 클로즈됩니다.
- 설정을 열고 '컴포넌트로 감싸기'를 켜면 맨 JSX 대신 재사용 가능한 React 함수 컴포넌트를 만듭니다.
- 컴포넌트 이름 필드에서 감쌀 때 사용할 이름(예: MyIcon)을 지정하세요.
- 'TypeScript props'를 켜면 타입이 붙은 React.SVGProps를 펼쳐 컴포넌트가 width, className 등의 prop을 받게 합니다.
- 복사를 눌러 JSX를 복사한 뒤 React 또는 Next.js 프로젝트에 붙여넣으세요.
예시
단순 아이콘에서 인라인 JSX
입력
<svg viewBox="0 0 24 24"><path stroke-width="2" class="icon" d="M4 12h16"></path></svg>
출력
<svg viewBox="0 0 24 24"><path strokeWidth="2" className="icon" d="M4 12h16" /></svg>
타입 props가 붙은 래핑 컴포넌트
입력
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"></circle></svg>
출력
export function MyIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg viewBox="0 0 24 24" {...props}><circle cx="12" cy="12" r="10" /></svg>
);
}자주 묻는 질문
- 변환기는 제 SVG에서 무엇을 바꾸나요?
- 하이픈이 있거나 네임스페이스가 붙은 속성을 React의 camelCase 형태로 바꾸고(stroke-width → strokeWidth, fill-rule → fillRule, xlink:href → xlinkHref), class 속성을 className으로 바꾸며, path·rect 같은 빈 요소를 셀프 클로즈해 유효한 JSX로 만듭니다.
- 컴포넌트와 TypeScript 옵션은 어떻게 동작하나요?
- '컴포넌트로 감싸기'가 꺼져 있으면 어디에나 둘 수 있는 인라인 JSX가 나옵니다. 켜면 입력한 컴포넌트 이름으로 SVG를 이름 있는 함수 컴포넌트로 감쌉니다. 'TypeScript props'를 켜면 그 컴포넌트에 React.SVGProps로 타입을 붙이고 {...props}를 펼쳐 width, height, className, 이벤트 핸들러를 전달합니다.
- 인라인 스타일도 처리하나요?
- 일반 속성은 변환되지만 문자열 style 속성은 JSX style 객체로 다시 쓰지 않습니다. React는 style을 camelCase 속성으로 이뤄진 객체로 기대하므로, 붙여넣은 뒤 인라인 style은 직접 확인하세요. 이 도구는 속성 이름, 셀프 클로즈, 선택적 컴포넌트 래핑에 집중합니다.
- SVG가 유효하지 않으면 어떻게 되나요?
- 입력을 SVG 또는 XML로 파싱할 수 없으면 출력 대신 오류 메시지가 표시됩니다. 마크업에 루트 요소가 하나만 있고 태그가 짝을 이루는지 확인하면, 입력하는 대로 JSX가 다시 나타납니다.
- 제 SVG가 어딘가로 업로드되나요?
- 아니요. 변환은 브라우저 안에서만 도는 순수 문자열 처리이므로 SVG 마크업이 서버로 전송되지 않으며 오프라인에서도 작동합니다.
관련 도구
코드 이미지 변환기
코드 스니펫을 브라우저 안에서 구문 강조가 입혀진 깔끔한 PNG 이미지로 바꿔 줍니다. 업로드는 필요 없습니다.
색상 대비 검사기
전경색과 배경색의 WCAG 대비비를 확인하고 일반 텍스트와 큰 텍스트에서 AA와 AAA를 통과하는지 보여 줍니다.
색상 혼합기
두 HEX 색을 원하는 비율로 RGB 또는 Lab 색공간에서 섞어, 만들어진 중간 색을 견본과 복사 가능한 HEX 값으로 보여줍니다.
색상 셰이드 생성기
기준 HEX 색 하나를 Tailwind 방식의 50~950 셰이드 스케일로 만들고 각 단계를 색 견본과 복사 가능한 HEX 값으로 보여줍니다.