[Next] SVGR 로더를 이용해서 SVG 파일 불러오기
2022. 12. 24. 01:05ㆍStudy/React
사건 발생
Figma에서 사용한 아이콘을 svg 파일로 다운받아 사용하려고 했다. 어떻게 하면 깔끔하게 사용할 수 있을까?
Install
svgr loader를 설치한다.
npm install @svgr/webpack --save-dev
next.config.js 설정을 변경한다.
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
return config;
},
};
module.exports = nextConfig;
svg 파일을 추가한다
나는 public에 svg 파일을 모았다. 이걸 바로 pages 하위에 바로 사용하면!! 다음과 같은 에러가 뜬다.
왜 뜰까? 페이지에 바로 넣으려면 컴포넌트를 따로 만들어서 불러야 한다!
타입 선언한다
// custom.d.ts
declare module '*.svg' {
import React from 'react';
const svg: React.FC<React.SVGProps<SVGSVGElement>>;
export default svg;
}
// tsconfig.json
"include": [
"custom.d.ts",
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"postcss.config.js"
],
아이콘을 한 파일에 모아서 관리하고 불러온다
// components/icon.tsx
import Student from 'public/Student.svg';
export function StudentIcon() {
return (
<>
<Student />
</>
);
}
아이콘 불러서 사용하기
import { StudentIcon } from '../components/icon';

끝!!
Reference
- https://velog.io/@leejaehyuck9/TSNext.js에서-SVG-컴포넌트로-사용하기
- https://kyounghwan01.github.io/blog/React/handling-svg/#next에서-svg-사용하기
- https://velog.io/@sunysty/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%97%90%EB%9F%AC