기존에는 프로젝트에서 svg를 아래와 같은 방식으로 사용하고 있었다.
import { Link } from "react-router-dom";
import logo from "../assets/logo.svg";
export default function Logo() {
return (
<Link to={"/"}>
<img src={logo} />
</Link>
);
}
img 태그를 사용중이었는데, img대신 리액트 컴포넌트로 사용하는건 어떻겠냐는 피드백을 받았다.
클릭하면 색이 바뀌는 효과를 주고 싶었는데 img태그로는 어려워서... 리액트 컴포넌트로 사용하기로 함.
react + vite에서 svg를 컴포넌트로 사용하기 위해 svgr 패키지를 설치하기로 함.
svgr은 svg를 컴포넌트로 사용할 수 있게 해주는 패키지
yarn add -D vite-plugin-svgr
vite-plugin-svgr
을 사용할 때 타입스크립트의 타입 참조를 추가해준다./// <reference types="vite/client" />
/// <reference types="vite-plugin-svgr/client" />
import svgr from 'vite-plugin-svgr'
plugins: [svgr(), react()],
{
"compilerOptions": {
...
"types": ["vite-plugin-svgr/client"],
...
},
"include": ["src", "svg.d.ts"]
}
declare module '*.svg' {
const content: React.FC<React.SVGProps<SVGElement>>
export default content
}
이제 사용 가능!
import { Link } from "react-router-dom";
import Logo from "../assets/logo.svg?react";
export default function AppLogo() {
return (
<Link to={"/"}>
<Logo />
</Link>
);
}
굿굿
https://www.npmjs.com/package/vite-plugin-svgr
https://breathof.tistory.com/311