#reactjs
#reactjs
Вопрос:
Требование заключается в том, что мне нужно инициализировать компонент react без обновления DOM
print() {
let toPrint = ReactDOMServer.renderToString(<ComponentToPrint0 />); // Returns string
toPrint = ReactDOMServer.renderToString(<ComponentToPrint1 />);
printHandler(toPrint);
}
printHandler(htmlElement) {
let tempWindow = window.open();
tempWindow.document.write('<html><head><title>Print</title>');
tempWindow.document.write('<link rel="stylesheet" href="http://localhost:9595/app/main.css" type="text/css" />');
tempWindow.document.write('</head><body>');
tempWindow.document.write(htmlElement);
tempWindow.document.write('</body></html>');
tempWindow.focus();
tempWindow.print();
tempWindow.close();
}
В приведенных выше ComponentToPrint0 и ComponentToPrint1 возвращают в виде строки, это лучший подход или какой-либо другой есть??
Комментарии:
1. Чего вы пытаетесь достичь? В React вы должны работать только с React и JSX, а не с DOM или HTML.
2. Если вы ожидаете, что <ComponentToPrint0 /> компоненты будут статической разметкой, тогда проверьте это stackblitz.com/edit/react-uogn1a и ‘<ComponentToPrint0 />’ вернет просто <ComponentToPrint0 />
3. @Jayavel обновил запрос, пожалуйста, проверьте
4. @VladimirSerykh я нахожусь на другом маршруте, где ComponentToPrint0 не было в DOM, когда я нажимаю на кнопку печати, мне нужно распечатать счет-фактуру с ComponentToPrint0 в качестве заголовка. Я достиг этого с помощью ReactDOMServer.renderToString(<ComponentToPrint0 />).
Ответ №1:
Его можно обрабатывать как любое другое приложение React:
const Popup = () => <>
<head>
<title>Print</title>
<link rel="stylesheet" href="http://localhost:9595/app/main.css" type="text/css" />
</head>
<body>
<ComponentToPrint0 />
<ComponentToPrint1 />
</body>
</>;
...
let tempWindow = window.open();
ReactDOM.render(<Popup/>, tempWindow.document.documentElement);
tempWindow.focus();
tempWindow.print();
tempWindow.close();