20210301 13일차 그림판 적용

2021. 3. 1. 18:47·BootCamp_Codestates/Final Project

 

필수 개념 useRef

 

useRef는 우리가 리액트 컴포넌트에서 외부 라이브러리의 인스턴스 또는 DOM 을 특정 값 안에 담을 때 사용합니다.

 

https://velog.io/@edie_ko/React-TypeScript-JavaScript%EC%97%90%EC%84%9C-TypeScript%EB%A1%9C-%EB%B3%80%ED%99%98-%EC%97%90%EB%9F%AC-%EC%84%A0%EB%AC%BC-%EC%84%B8%ED%8A%B8

ref 가 null 일 수도 있는 상황에 해당하여, Generics 를 사용하여 표기했다.

const firstCanvas = useRef<any>(null);

 

추가로 공부해야할 내용(반드시 리뷰 및 내용정리해야 함.)

타입스크립트로 리액트 Hooks 사용하기(useState, useReducer, useRef)

출처: velog.io/@velopert/using-hooks-with-typescript

 

Paint component 코드

 

useRef 를 사용하여 구현했고( 추가적으로 내용정리 필요.)

색 변경 시 hooks 메소드인 usestate 를 이용하여 상태 관리를 한다.

import React, { ReactElement, useRef, useState } from "react";
import styled, { keyframes } from "styled-components";
import CanvasDraw from "react-canvas-draw";

export default function CPaint(): ReactElement {
	const [color, changeColor] = useState("black");
	const firstCanvas = useRef<any>(null);
	const secondCanvas = useRef<any>(null);
	const handleColorClick = (event: any) => {
		const newColor = event.target.style.backgroundColor;
		changeColor(newColor);
	};

	const clear1 = () => {
		firstCanvas.current.clear();
	};
	const undo1 = () => {
		firstCanvas.current.undo();
	};
	const handleSaveClick = () => {
		const data = firstCanvas.current.getSaveData();
		console.log("firstdata", data); // type of data === 'string'
		// secondCanvas.current.loadSaveData(data);
	};
	const clear2 = () => {
		secondCanvas.current.clear();
	};
	const undo2 = () => {
		secondCanvas.current.undo();
	};
	const revise = () => {
		const secondData = secondCanvas.current.getSaveData();
		console.log("SecondData", secondData); // 두번째 캔버스의 모든 데이터.
	};

	return (
		<Main>
			<CanvasDraw
				className="CanvasDraw"
				brushRadius={1}
				brushColor={color}
				catenaryColor="red"
				hideGrid
				ref={firstCanvas}
				style={canvasStyle}
			/>
			{/* <CanvasDraw brushRadius={1} brushColor={color} hideGrid ref={secondCanvas} style={canvasStyle} /> */}
			{/* <PaintColor> */}
			{/* <Paint className="fas fa-brush" /> */}
			<Colors className="colors">
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#2c2c2c" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "white" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#FF3B30" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#FF9500" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#FFCC00" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#4CD963" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#5AC8FA" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#0579FF" }} />
				<Color className="singleColor" onClick={handleColorClick} style={{ backgroundColor: "#5856D6" }} />
			</Colors>
			{/* </PaintColor> */}

			<Buttons>
				<Button onClick={clear1}>새종이</Button>
				<Button onClick={undo1}>마지막지우기</Button>
				<Button onClick={handleSaveClick}>다그렸다버튼</Button>
				{/* <Button onClick={clear2}>newPaper</Button>
				<Button onClick={undo2}>undo</Button>
				<Button onClick={revise}>Save Revision</Button> */}
			</Buttons>
		</Main>
	);
}

스타일 컴포넌트 생략.

 

추가해야할 기능

 

현재 색변경, 그림 지우기, 저장한 내용을 렌더링하는 것까지 구현 및 이해를 했다.

선들이 수많은 점들로 채워져 있는데, 이 모든 좌표 데이터가 스트링 형태로 데이터 베이스에 저장되어야 될 것 같다.

가능한 일인지 좀더 확인이 필요하다.

더하여서, 펜 굵기 변경 및 지우개(굵은) 옵션을 추가해야겠다.

 

 

도움 받은 사이트

react canvas draw

: www.npmjs.com/package/@types/react-canvas-draw, www.npmjs.com/package/react-canvas-draw

노마더코더 그림판 만들기

: www.youtube.com/watch?v=cq-l2zPUVoU&feature=emb_title

타입스크립트로 리액트 Hooks 사용하기(useState, useReducer, useRef)

출처: velog.io/@velopert/using-hooks-with-typescript

 

'BootCamp_Codestates > Final Project' 카테고리의 다른 글

20210304 16일차 회원가입 로직 구현(미완)  (0) 2021.03.04
20210302 - 0303 14,15일차 그림판 PNG 저장 구현  (2) 2021.03.03
20210228 12일차 Sub메뉴바/React 에서 페이지 이동  (0) 2021.03.01
20210227 11일차 재충전  (0) 2021.03.01
20210226 10일차 반응형웹_미디어쿼리  (0) 2021.02.27
'BootCamp_Codestates/Final Project' 카테고리의 다른 글
  • 20210304 16일차 회원가입 로직 구현(미완)
  • 20210302 - 0303 14,15일차 그림판 PNG 저장 구현
  • 20210228 12일차 Sub메뉴바/React 에서 페이지 이동
  • 20210227 11일차 재충전
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
20210301 13일차 그림판 적용
상단으로

티스토리툴바