Необходимо отправить на печать компонент по нажатию на кнопку. Попробовал сделать это с помощью
react-to-print. Всё получилось, но только с тестовым примером (в котором в верху страницы добавляется ссылка, при нажатии на которую компонент уходит на печать).
Проблема в том, что кнопка находится в компоненте Footer. Пробовал сделать так:
trigger={() => (this.state.isPrint)}
Чтобы проверить, нажата ли кнопка, но получил
ошибкуElement type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
Как правильно реализовать или есть что-нибудь получше react-to-print для распечатки компонентов?
ReportPageimport ReactToPrint from 'react-to-print';
class ReportPage extends Component {
constructor(props) {
super(props);
this.state = {
isPrint: false
};
...
}
...
printTable(value) {
this.setState({ isPrint: value });
}
render() {
return (
<div>
<ReactToPrint
trigger={() => <a href='#'>Print this out!</a>} // здесь добавляется ссылка, при нажатии компонент уходит на печать
content={() => this.componentRef}
/>
<main>
...
<ReportTable ref={el => (this.componentRef = el)} /> // этот компонент надо напечатать
</main>
<Footer handlePrintTable={this.printTable}/>
</div>
);
}
}
Footerclass Footer extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.props.handlePrintTable(true);
}
render() {
return (
<footer>
...
<a href='#' role='button' onClick={this.handleClick}>
Распечатать
</a>
...
</footer>
);
}
}
Описание triggerA function that returns a React Component or HTML element