티스토리 뷰
Frontend/react.js
[React | Vite] Vite로 구성된 React + ts 프로젝트에서 svg사용하기
blueprint-12 2023. 8. 10. 00:13CRA로 프로젝트를 만들면 .svg 파일을 마치 리액트 컴포넌트처럼 import 하여 사용할 수 있다.
import {ReactComponent as MySvg } from "../assets/mysvg.svg;
const MyComponent = () => {
return <MySvg width="30" height="30" />
}
하지만, Vite로 리액트 프로젝트를 구성하고 있다면 추가 세팅이 필요하다.
세팅 방법은 간단한데, svg관련 라이브러리를 추가로 설치해준다.
1. vite-plugin-svgr
yarn add vite-plugin-svgr #npm 대신 yarn을 애용하고 있다.
2. vite.config.ts 에 플러그인을 추가해주기
vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr'; //임포트하고
// https://vitejs.dev/config/
export default defineConfig({
plugins: [svgr(), react()], //여기에 svgr()을 추가적으로 넣어준다.
});
3. vite.env.d.ts에 코드 추가해주기
타입스크립트를 사용하고 있다면, config를 바꿔도 에러가 발생할 것이다. 이때, vite-env.d.ts에 아래 코드를 추가해주면 된다. (이 내용은 vite-plugin-svgr 의 repo에 가면 방법이 나와 있으니 참고하면 된다.)
vite.env.d.ts
/// <reference types="vite-plugin-svgr/client" />
이제 CRA처럼 svg 파일을 리액트 컴포넌트처럼 사용할 수 있다. 👩
예시 코드
import React from 'react';
import * as S from './styles';
import { ReactComponent as Search } from '../../assets/search-icon.svg';
const SearchBar = () => {
return (
<S.Wrapper>
<S.SearchInput type="search" placeholder="질환명을 입력해 주세요." />
<Search width="30" height="30" fill="currentColor" preserveAspectRatio="none" />
</S.Wrapper>
);
};
export default SearchBar;
- svg파일을 Search 이름으로 가져와서 컴포넌트처럼 사용
개인적으로 svg를 사용하면서 fill, preserveAspectRatio 속성에 대해서도 좀 보게 됐는데 이 속성들을 조합하여 반응형 svg 를 구현할 수 있는 거 같다. 아직 잘 활용하지 못하지만 알아두면 좋을 정보같아서 기록에 남겨놓는다.
+ 이 외에도 라이브러리를 사용하지 않더라도 vite의 공식문서에 따르면 .svg와 같은 assets를 어떻게 설정하면 vite환경에서도 컴포넌트처럼 사용할 수 있는 지에 대해서 나와있다.
https://ko.vitejs.dev/guide/features.html
'Frontend > react.js' 카테고리의 다른 글
[React] React 프로젝트에 ESLint 와 Prettier, Git Hook 세팅하기 (0) | 2023.08.19 |
---|---|
[React] 리액트 컴포넌트와 렌더링, state로 관리되어야 할 것 (0) | 2023.08.08 |
[React | socket.io] Websockek의 개념과 리액트에서 소켓 통신하기 (0) | 2023.06.25 |
[React] Suspense 와 React.lazy (0) | 2023.05.28 |
[SWR | 서버데이터관리] SWR 사용해보기, optimistic vs pessimistic UI, cookie 공유 tip (0) | 2023.05.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ~ ^
- reactAPI
- nvm 설치순서
- float 레이아웃
- 원티드 3월 프론트엔드 챌린지
- Prittier
- aspect-ratio
- D 플래그
- 항해99프론트후기
- 항해99추천비추천
- text input pattern
- 부트캠프항해
- 원티드 FE 프리온보딩 챌린지
- 타입스크립트 DT
- nvm경로 오류
- tilde caret
- is()
- 항해99프론트
- 프리온보딩 프론트엔드 챌린지 3월
- 형제 요소 선택자
- getStaticPaths
- && 셸 명령어
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 원티드 프리온보딩 FE 챌린지
- 프리렌더링확인법
- fs모듈 넥스트
- 틸드와 캐럿
- 타입스크립트 장점
- getServerSideProps
- grid flex
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함