Утечка памяти при вызове нативного onload в React

87
16 апреля 2022, 07:20

Всем привет! Мучаюсь с такой проблемой. Я написал компоненту Canvas которая рендерит картинку представляющую из себя канвас и пропсы. Для того что бы дождаться что картинка загружена успешно я использую нативное событие onload но при этом течёт память. Картинка рендериться бесконечно. Помогите разобраться в чём дело пожалуйста!

import React, { useEffect, useRef, useCallback } from 'react';
// pic
import picture from '../../images/soho.png';
function Canvas({ name, surname }) {
    const canvas = useRef(null);
    const img = useRef(null);
    const getCanvas = useCallback(() => {
        img.current.onload = function() {
            const ctx = canvas.current.getContext("2d");
            ctx.drawImage(img.current, 0, 0);
            ctx.font = "90px bold Courier";
            ctx.fillStyle = "green";
            ctx.fillText(name, 50, 110);
            ctx.fillText(surname, 50, 210);
            const dataUrl = canvas.current.toDataURL("image/png")
            img.current.src = dataUrl;
            console.log('img.current', img.current);
        }
    }, [name, surname])
    useEffect(() => {
        getCanvas();
    }, [getCanvas]);
    return (
        <div>
            <canvas ref={canvas} width={640} height={425} hidden={true} />
            <img ref={img} src={picture} alt="" />
        </div>
    )
}
export default Canvas;
READ ALSO
Как я могу упростить данный код js

Как я могу упростить данный код js

в переменную selector должно присваиваться значение всех элементов многомерного массива marks_types с индексом 1То есть что-то вроде

108
d3 js Uncaught TypeError: Cannot read property &#39;select&#39; of null

d3 js Uncaught TypeError: Cannot read property 'select' of null

Всем привет! Я использую d3 js первый раз для отрисовки агрегационного графика, и мне нужно в нем обновить данные по нажатию на кнопкуДля отрисовки...

84
Javascript как передать ссылку на HTML элемент в функцию

Javascript как передать ссылку на HTML элемент в функцию

У меня есть таблица, в которой есть кнопка "Удалить" в каждой строки, при нажатии на которую выставляется дата удаленияТеперь я хочу...

138
Вывод объектов с помощью метода

Вывод объектов с помощью метода

Нужно вывести 3 карточки товараЗадание: Создать класс, позволяющий создавать карточку товара

124