import { Canvas } from 'fabric'; import { useEffect, useRef } from 'react'; type props = { canvasWidth: number, canvasHeight: number, backgroundColor: string, } export const CanvasRenderer = ({ canvasWidth, canvasHeight, backgroundColor }: props) => { const canvasEl = useRef({} as HTMLCanvasElement); const fabricCanvasInstance = useRef({} as Canvas); useEffect(() => { if (!canvasEl.current) return; fabricCanvasInstance.current = new Canvas(canvasEl.current, { canvasWidth, canvasHeight, backgroundColor, preserveObjectStacking: true }); fabricCanvasInstance.current.renderAll(); return () => { if (!fabricCanvasInstance.current) return; fabricCanvasInstance.current.dispose() } }, []) return { fabricCanvasInstance, UIComponent: } }