Closed leegwae closed 1 year ago
JS ๋น๋๋ฌผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ๋ก ํ๋ค. ๋จผ์ SVG ํ์ผ์ JS ๋ฒ๋ค์์ ์ ๊ฑฐํด๋ณด์.
toquiz์์๋ ์ฌ๋ฌ ์์ด์ฝ์ ์ฌ์ฉํ๊ณ ์๋ค.
์ ํ๋ฉด์ ์๋ก ๋ค๋ฉด ๋ฉ๋ด/๊ณ์ /์ข์์ ์์ด์ฝ์ด๋ค. ํ์ฌ๋ src/components/vectors ํด๋ ์๋์์ JSX๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ์๋ค. ๋ง์ฝ ์ด๋ค์ ๋ชจ๋ ์ ์ ์์ ์ผ๋ก ๋ฐ๊พผ๋ค๋ฉด ๊ทธ ๊ฐ์๋งํผ ์์ฒญ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์์ด์ฝ๋ค์ ๋ชจ๋ SVG ์คํ๋ผ์ดํธ๋ก ๋ง๋ค์ด ์ ๊ณตํ๊ฒ ๋ค.
src/components/vectors
// Add.tsx import type { SVGProps } from 'react'; import React from 'react'; export const Add = (props: SVGProps<SVGSVGElement>): JSX.Element => ( <svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48" {...props} > <path d="M450-450H200v-60h250v-250h60v250h250v60H510v250h-60v-250Z" /> </svg> );
์ JSX๋ฅผ ์๋์ฒ๋ผ .svg๋ก ๊ตฌ์ฑํด์ค๋ค.
.svg
<-- icons.svg --> <svg> <defs> <symbol id="add" xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" > <path fill="currentcolor" d="M450-450H200v-60h250v-250h60v250h250v60H510v250h-60v-250Z" /> </symbol> </defs> </svg>
svg
symbol
id
path
fill="currentcolor"
// MyPage.tsx import React from "react"; import Icons from "/icons.svg?url"; export function MyPage(): JSX.Element { return ( <svg className="h-6 w-6 text-primary"> <use href={`${Icons}#add`} /> </svg> ); }
์ด์ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฅ ๋ง์ ๋ถ๋์ ์ฐจ์งํ ๋ก๊ณ ์ฉ SVG๋ public ํด๋ ์์ ์ ์ ์์ ์ผ๋ก ์ฎ๊ฒผ๋ค.
public
JS ๋น๋๋ฌผ์ ํฌ๊ธฐ๊ฐ 523.75KB์์ 402.55KB๋ก ์ฝ 20% ์ค์ด๋ค์๋ค!
523.75KB
402.55KB
SVG ์คํ๋ผ์ดํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ํด์ ์ฐพ์๋ณด๊ฑฐ๋ ์ง์ ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค.
https://kurtextrem.de/posts/svg-in-js
๐คธโโ๏ธ ๋ชฉํ
JS ๋น๋๋ฌผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ๋ก ํ๋ค. ๋จผ์ SVG ํ์ผ์ JS ๋ฒ๋ค์์ ์ ๊ฑฐํด๋ณด์.
โจ์์ด์ฝ๋ค์ SVG ์คํ๋ผ์ดํธ๋ก ๋ง๋ค๊ธฐ
toquiz์์๋ ์ฌ๋ฌ ์์ด์ฝ์ ์ฌ์ฉํ๊ณ ์๋ค.
์ ํ๋ฉด์ ์๋ก ๋ค๋ฉด ๋ฉ๋ด/๊ณ์ /์ข์์ ์์ด์ฝ์ด๋ค. ํ์ฌ๋
src/components/vectors
ํด๋ ์๋์์ JSX๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ์๋ค. ๋ง์ฝ ์ด๋ค์ ๋ชจ๋ ์ ์ ์์ ์ผ๋ก ๋ฐ๊พผ๋ค๋ฉด ๊ทธ ๊ฐ์๋งํผ ์์ฒญ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์์ด์ฝ๋ค์ ๋ชจ๋ SVG ์คํ๋ผ์ดํธ๋ก ๋ง๋ค์ด ์ ๊ณตํ๊ฒ ๋ค.์์
์ JSX๋ฅผ ์๋์ฒ๋ผ
.svg
๋ก ๊ตฌ์ฑํด์ค๋ค.svg
ํ๊ทธ๋ฅผsymbol
ํ๊ทธ๋ก ๋ฐ๊พผ๋ค.id
๋ฅผ ์ ๊ณตํ๋ค.path
ํ๊ทธ ๋ด์fill="currentcolor"
๋ฅผ ์ถ๊ฐํ๋ค.์ด์ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
โจ ๋ก๊ณ ์ฉ SVG๋ฅผ ์ ์ ์์ ์ผ๋ก ์ ๊ณตํ๊ธฐ
๊ฐ์ฅ ๋ง์ ๋ถ๋์ ์ฐจ์งํ ๋ก๊ณ ์ฉ SVG๋
public
ํด๋ ์์ ์ ์ ์์ ์ผ๋ก ์ฎ๊ฒผ๋ค.๐ SVG-in-JS ์ ๊ฑฐ ๊ฒฐ๊ณผ
JS ๋น๋๋ฌผ์ ํฌ๊ธฐ๊ฐ
523.75KB
์์402.55KB
๋ก ์ฝ 20% ์ค์ด๋ค์๋ค!๊ธฐํ
SVG ์คํ๋ผ์ดํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ํด์ ์ฐพ์๋ณด๊ฑฐ๋ ์ง์ ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค.
์ฐธ๊ณ
https://kurtextrem.de/posts/svg-in-js