#reactjs
#reactjs
Вопрос:
В чем смысл этой ошибки? и как это исправить
Я пытаюсь преобразовать данные html в холст с html2canvas
помощью .
мой код:
html2canvas(ReactHtmlParser(pages[a])).then(function(canvas) {
console.log(canvas);
});
Ответ №1:
Итак, в основном, что вы хотите сделать, это получить a canvas
из вашего react DOM.
Теперь, что вам нужно сделать, это предоставить обычный DOM html2canvas(normalHTMLDomFromJS)
.
Но то, что вы делаете, это передать ReactDOM (который является простыми объектами javascript) в html2canvas
Element is not attached to a document html2canvas
происходит, когда вы передаете что-то, кроме jsDOM html2canvas(shouldNotBeJSDOMToThrowError)
, что означает, что ReactHtmlParser(pages[a])
это не возвращает js DOM (его возвращающий react DOM(что-то вроде {}))
Я полагаю, вы делаете это с помощью приложения react, поэтому вы должны получить a ref
из своего элемента, затем вы можете получить доступ к своему обычному js DOM из ref.current
import React, { useRef } from "react";
import html2canvas from "html2canvas";
import ReactDOM from "react-dom";
function captureScreenshot(rootElem) {
alert("Now.. Preparing Screenshot");
console.log(rootElem);
html2canvas(rootElem).then(canvas => {
document.body.appendChild(canvas);
});
}
function App(props) {
const rootRef = useRef(null);
const onClick = () => {
const elements = rootRef.current;
captureScreenshot(elements);
};
return (
<div ref={rootRef}>
<h2 style={{ color: "pink" }}>bla bla bla</h2>
<button onClick={onClick}>ScreenShot</button>
</div>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
Комментарии:
1. Я не могу использовать для строки HTML? Я не хочу показывать его в том же документе! Я хочу добавить холст в другую функцию для сохранения изображения.
2. Ошибка заключается в том, что вы передаете react DOM(простые объекты) в html2canvas, вы должны использовать ссылку или присвоить идентификатор вашему элементу и сделать это следующим образом html2canvas(document.getElementById(«my-id)), а с помощью вашего canvas вы можете html2canvas(rootElem).затем (canvas => {SaveImage(холст); });