좋아요 아이콘을 만들기 위해 svg를 사용한 내용을 포스팅한다.
좋아요 아이콘을 svg로 컴포넌트에서 출력하고 누르면 svg 색깔을 변경하는 것이었다.
svg를 react로 사용하게 해주는 svgr은 이미 세팅된 상태인데, 동적으로 svg의 색을 변경시키는 방식과 원리에 대해 조사해보았다.
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="currentColor" d="M18 1l-6 4-6-4-6 5v7l12 10 12-10v-7z"/>
</svg>
import styled from '@emotion/styled';
import React, { useEffect, useMemo, useState } from 'react';
import CircleButton from '../../atoms/CircleButton';
import StickyComponent from '../../atoms/StickyComponent';
import LikeIcon from '../../../assets/likeIcon.svg';
interface PostLikeSharebuttonProps {
likeCount: number;
liked: boolean;
}
const PostLikeShareButton = (prop: PostLikeSharebuttonProps) => {
const [liked, setLiked] = useState(prop.liked);
const handleLikeToggle = () => {
setLiked(!liked);
};
return (
<PostLikeShareStickyBox top={10} left={1}>
<CircleButton onClick={handleLikeToggle} active={liked}>
<LikeIcon color={liked ? 'red' : 'gray'} />
</CircleButton>
<div>{prop.likeCount}</div>
<CircleButton />
</PostLikeShareStickyBox>
);
};
const PostLikeShareStickyBox = styled(StickyComponent)`
padding: 0.5rem;
height: 6.5rem;
flex-direction: column;
@media (max-width: 1024px) {
display: none;
}
`;
export default PostLikeShareButton;
currentColor는 동적으로 color를 줄 수 있다
다른 방식도 있는데 'current'로 속성을 직접 지정해줄 수 있다.
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="current" d="M18 1l-6 4-6-4-6 5v7l12 10 12-10v-7z"/>
</svg>
return (
<PostLikeShareStickyBox top={10} left={1}>
<CircleButton onClick={handleLikeToggle} active={liked}>
<LikeIcon fill={liked ? 'red' : 'gray'} />
</CircleButton>
<div>{prop.likeCount}</div>
<CircleButton />
</PostLikeShareStickyBox>
);
스케일러블 벡터 그래픽스
SVG: Scalable Vector Graphics
SVG Color
SVG CurrentColor 설명