12-5. 좋아요 UI 구현하기

API 준비도, 상태관리 준비도 끝났으니, 이제 유저인터페이스를 구현 할 차례입니다. 우리는 PostFooter 라는 컴포넌트를 만들어서 좋아요 상태와, 덧글의 갯수를 보여주도록 하겠습니다.

PostFooter 는 위와 같이 아이콘을 보여주게 됩니다. 이 아이콘은 react-icons 모듈을 설치하고, 해당 패키지에서 불러와서 사용하도록 하겠습니다.

$ yarn add react-icons

src/components/Shared/PostList/PostFooter.js

import React from 'react';
import styled from 'styled-components';
import oc from 'open-color';

import HeartIcon from 'react-icons/lib/go/heart';
import CommentIcon from 'react-icons/lib/io/chatbubble';

// 테두리, 패딩을 설정하고 내부의 svg 와 span 스타일을 설정해줌
const Wrapper = styled.div`
    padding: 1rem;
    border-top: 1px solid ${oc.gray[1]};
    display: flex;
    color: ${oc.gray[5]};
    svg {
        font-size: 1.75rem;
        cursor: pointer;
    }
    span {
        margin-left: 0.25rem;
        font-size: 0.8rem;
        padding-bottom: 0.25rem;
    }
`;

// 좋아요
const Likes = styled.div`
    display: flex;
    align-items: center;
    svg {
        &:hover {
            color: ${oc.gray[6]};
        }
        &:active {
            color: ${oc.pink[6]};
        }
    }
    ${props=>props.active && `
        svg {
            color: ${oc.pink[6]};
            &:hover {
                color: ${oc.pink[5]};
            }
        }
    `}
`;

// 덧글, 우측정렬됨
const Comments = styled.div`
    margin-left: auto;
    display: flex;
    align-items: center;
    svg {
        &:hover {
            color: ${oc.gray[6]};
        }
        &:active {
            color: ${oc.cyan[6]};
        }
    }
`;

const PostFooter = ({liked, likesCount=0, comments=[], onToggleLike, onCommentClick}) => (
    <Wrapper>
        <Likes active={liked}>
            <HeartIcon/>
            <span>좋아요 {likesCount}개</span>
        </Likes>
        <Comments>
            <CommentIcon/>
            <span>덧글 {comments.length}개</span>
        </Comments>
    </Wrapper>
);

export default PostFooter;

이제 이 컴포넌트를 Post 컴포넌트에서 불러와서 Content 컴포넌트 하단에 렌더링해보세요.

src/components/Shared/PostList/Post.js

(...)

import PostFooter from './PostFooter';

(...)

const Post = ({post}) =>{
    const {
        count,
        username,
        content,
        comments,
        likesCount,
        createdAt
    } = post.toJS();

    return (
        <Wrapper>
            <PostHead>
                <UserThumbnail image={`/api/users/${username}/thumbnail`}/>
                <Username>{username}</Username>
                <Count>#{count}번째 생각</Count>
                <Time><TimeAgo date={createdAt} formatter={formatter}/></Time>
            </PostHead>
            <Content>
                {content}
            </Content>
            <PostFooter/>
        </Wrapper>
    )
}

export default Post;

하단에 이렇게 좋아요와 덧글 버튼이 나타났나요?

results matching ""

    No results matching ""