import React from "react"; const scaleWidth = 500; const scaleHeight = 500; function draw(canvas, scaleX, scaleY) { const context = canvas.getContext("2d"); context.scale(scaleX, scaleY); context.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight); context.beginPath(); context.setLineDash([]); context.lineWidth = 2; context.strokeStyle = "red"; context.moveTo(0, 100); context.lineTo(scaleWidth, 100); context.moveTo(0, 400); context.lineTo(scaleWidth, 400); context.stroke(); context.lineWidth = 1; context.strokeStyle = "blue"; context.fillStyle = "blue"; context.rect(200, 200, 100, 100); context.fill(); context.closePath(); } function CanvasDraw() { const [scale, setScale] = React.useState({ x: 1, y: 1 }); const canvas = React.useRef(null); const calculateScaleX = () => (!canvas.current ? 0 : canvas.current.clientWidth / scaleWidth); const calculateScaleY = () => (!canvas.current ? 0 : canvas.current.clientHeight / scaleHeight); const resized = () => { canvas.current.width = canvas.current.clientWidth; canvas.current.height = canvas.current.clientHeight; setScale({ x: calculateScaleX(), y: calculateScaleY() }); }; React.useEffect(() => resized(), []); React.useEffect(() => { const currentCanvas = canvas.current; currentCanvas.addEventListener("resize", resized); return () => currentCanvas.removeEventListener("resize", resized); }); React.useEffect(() => { draw(canvas.current, scale.x, scale.y); }, [scale]); return ; } export default CanvasDraw;