Добрый день!
Я новичок в React и html2canvas. Я делаю приложение, которое будет делать «снимки экрана» моего DOM с использованием html2canvas, а затем сохранять его в массиве снимков экрана, которые затем будут также отображаться на экране.
Я сохраняю каждый объект <canvas>
, полученный из обещания html2canvas, в массив, а затем передаю его моему компоненту ScreenshotsContainer
, который передает массив компоненту Screenshots
. Компонент Screenshots
затем сопоставит массив объектов <canvas>
с отдельными Screenshot
компонентами.
В App.js я вызываю функцию html2canvas и передаю массив компоненту ScreenshotsContainer
import React, { Component } from 'react';
import ScreenshotsContainer from './containers/ScreenshotsContainer/ScreenshotsContainer'
import html2canvas from 'html2canvas';
import './App.css';
class App extends Component {
state = {
canvasArray: []
}
getScreenshotHandler = () => {
console.log("[Canvas Array from state length:]" + this.state.canvasArray.length)
let canvasArray = this.state.canvasArray;
html2canvas(document.body).then((canvas) => {
canvasArray.push(canvas)
});
console.log("[Canvas Object value: ]" + canvasArray);
this.setState({ canvasArray: canvasArray })
}
render() {
return (
<React.Fragment>
<button onClick={this.getScreenshotHandler}>Get Screenshot</button>
<ScreenshotsContainer canvasArray={this.state.canvasArray} />
</React.Fragment>
);
}
}
export default App;
Компонент ScreenshotsContainer передаст полученный массив в компонент Screenshots:
import React, { Component } from 'react';
import './ScreenshotsContainer.css'
import Screenshots from '../../components/Screenshots/Screenshots';
class ScreenshotsContainer extends Component {
render() {
return (
<div className="ScreenshotsContainer">
<Screenshots canvasArray={this.props.canvasArray} />
</div>
);
}
}
export default ScreenshotsContainer;
Компонент Screenshots отобразит массив и передаст каждый объект canvas в компонент Screenshot:
import React, { Component } from 'react';
import Screenshot from './Screenshot/Screenshot';
class Screenshots extends Component {
render() {
const screenshots = this.props.canvasArray.map(canvas => {
return (
<Screenshot
key={Math.random}
canvasObj={canvas}
/>
)
})
return (
<React.Fragment>
{screenshots}
</React.Fragment>
);
}
}
export default Screenshots;
Вот компонент Screenshot
import React from 'react';
import './Screenshot.css';
const screenshot = (props) => (
<div className="Screenshot" >
<canvas ref={props.canvasObj} style={{
width: '10%',
height: '10%'
}} />
</div>
);
export default screenshot;
Что я на самом деле получаю, нажимая кнопку:
Актуальный скриншот моего результата
Мне было интересно, какая часть пошла не так. Любая помощь будет оценена.