About_Section1 구현 완료_20210531_Day7

2021. 5. 31. 22:15·Projects/JPortfolio_2021

금일 진행 사항

- About Section1 구현 완료 - Pair review Carousel

 

Pair review Carousel

React-slick Library 를 사용하여 구현했다. 커스터마이징은 자유롭지 않지만 편리하다.

Firebase 에 리뷰 데이터를 저장하여 사용하는 방법도 있지만, 간단한 텍스트 데이터이기에 src - assets - reviews 의 자바스크립트 파일에 리뷰 배열을 만들어 데이터를 저장하고 불러오는 방식으로 구현했다.

Carousel.js 코드

import React, { Component } from "react";
import Slider from "react-slick";
import styled from "styled-components";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import wArrowLeft from "../assets/images/wArrowLeft.svg";
import wArrowRight from "../assets/images/wArrowRight.svg";
import gArrowLeft from "../assets/images/gArrowLeft.svg";
import gArrowRight from "../assets/images/gArrowRight.svg";
import theme from "../common/style/themes/default";
import reviews from "../assets/reviews/reviews";

function handleHover(element) {
  const arrowId = element.target.id;

  if (arrowId === "right") {
    element.target.src = gArrowRight;
  } else if (arrowId === "left") {
    element.target.src = gArrowLeft;
  }
}

function handleUnhover(element) {
  const arrowId = element.target.id;

  if (arrowId === "right") {
    element.target.src = wArrowRight;
  } else if (arrowId === "left") {
    element.target.src = wArrowLeft;
  }
}

function NextArrow(props) {
  const { className, style, onClick } = props;
  return (
    <img
      alt="Right"
      id="right"
      className={className}
      style={{ ...style, display: "block" }}
      onClick={onClick}
      onMouseOver={handleHover}
      onMouseOut={handleUnhover}
      src={wArrowRight}
    />
  );
}

function PrevArrow(props) {
  const { className, style, onClick } = props;
  return (
    <img
      alt="Left"
      id="left"
      className={className}
      style={{ ...style, display: "block" }}
      onClick={onClick}
      onMouseOver={handleHover}
      onMouseOut={handleUnhover}
      src={wArrowLeft}
    />
  );
}

class Carousel extends Component {
  render() {
    const settings = {
      dots: true,
      infinite: true,
      speed: 300,
      autoplay: true,
      autoplaySpeed: 3500,
      slidesToShow: 1,
      slidesToScroll: 1,
      border: "1px solid blue",
      nextArrow: <NextArrow />,
      prevArrow: <PrevArrow />,
    };
    return (
      <Main>
        <ReviewWrapper>
          <StyledSlider {...settings}>
            {reviews.map((ele) => (
              <ReviewBox key={ele.name}>
                <RContents>{ele.comment}</RContents>
                <RWriter>{ele.name}</RWriter>
              </ReviewBox>
            ))}
          </StyledSlider>
        </ReviewWrapper>
      </Main>
    );
  }
}

여기에서 포인트는 아래 라이브러리를 불러오는 것. CSS 적용이 잘 되지 않아 조금 헤맸는데, 역시 공식 사이트를 참고하는 것이 빠르고 정확하다.

import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";

 

도움 받은 사이트

스크롤바 숨기기: https://gofnrk.tistory.com/48

SVG 아이콘 색상 수정: https://iconscout.com/icon-editor

Change image src on img:hover :  https://stackoverflow.com/questions/18032220/css-change-image-src-on-imghover

React-Slick: https://react-slick.neostack.com/docs/example/simple-slider

React Slick 캐러셀 라이브러리 적용하기: https://www.jeje01.me/react/apply-carousel-using-library/

So good..!

'Projects > JPortfolio_2021' 카테고리의 다른 글

About_Section2 & Works 구현_20210602-03_Day9,10  (0) 2021.06.04
About_Section2 구현중_20210601_Day8  (0) 2021.06.02
Nav, Home, About 구현_20210530_Day6  (0) 2021.05.31
프로젝트 기획_컴포넌트 세분화 작업_20210528_Day5  (0) 2021.05.29
프로젝트 기획_컴포넌트 세분화 작업_20210527_Day4  (0) 2021.05.27
'Projects/JPortfolio_2021' 카테고리의 다른 글
  • About_Section2 & Works 구현_20210602-03_Day9,10
  • About_Section2 구현중_20210601_Day8
  • Nav, Home, About 구현_20210530_Day6
  • 프로젝트 기획_컴포넌트 세분화 작업_20210528_Day5
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Other than Tech
        • 잡생각
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Javascript Essentials
    mobile app
    How memory manage data
    structure of os
    VoiceJournal
    이벤트
    TCP/IP
    database
    leetcode
    자바스크립트 딥다이브
    Shared resources
    CPU scheduling algorithm
    모던 자바스크립트 Deep Dive
    프론트엔드 성능 최적화 가이드
    testing
    indie hacker
    Binary Tree BFS
    딥다이브
    need a database
    js pattern
    Time complexity and Space complexity
    자바스크립트
    DOM
    스코프
    커리어
    Operating System
    Data Structure
    Threads and Multithreading
    Network
    polylingo
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
About_Section1 구현 완료_20210531_Day7
상단으로

티스토리툴바