提问人:Frank HAWK 提问时间:11/17/2023 最后编辑:Drew ReeseFrank HAWK 更新时间:11/19/2023 访问量:36
如何使用 react-to-print 正确打印嵌套组件
How to print a nested component correctly with react-to-print
问:
这是我要打印的主要表单组件:
import { Fragment, useRef } from "react";
import FormDataPrint from "../Printer/FormDataPrint";
import ReactToPrint from "react-to-print";
import { Card, Button } from "reactstrap";
import { Printer } from "react-feather";
const FormData = ({ data }) => {
const formDataPrintRef = useRef();
const handlePrint = () => {
const formDataPrint = formDataPrintRef.current;
if (formDataPrint) {
formDataPrint.handlePrint();
}
};
return (
<Fragment>
{/* This is Form Area (Input etc.) */}
<Card>
<div className="d-flex justify-content-end mt-1">
<ReactToPrint
trigger={() => (
<Button
className="ms-1 text-center"
outline
color="primary"
onClick={handlePrint}
>
<Printer style={{ marginRight: "5px" }} size={20} />
<span>Print</span>
</Button>
)}
content={() => formDataPrintRef.current}
/>
<div style={{ display: "none" }}>
<FormDataPrint ref={formDataPrintRef} data={data} />
</div>
</div>
</Card>
</Fragment>
);
};
export default FormData;
这是子组件 FormDataPrint:
import React, { forwardRef } from "react";
const FormDataPrint = forwardRef((props, ref) => {
const { data } = props;
return <div ref={ref}>Print just this</div>;
});
export default FormDataPrint;
在这里,我只想为子组件的内容创建一个特殊的结构,并打印传入的数据(例如:name、surname)。但是当打开打印页面时,虽然div内容是空的,但它是两页,我只能在样式进入div时更改颜色。我只能在子组件的 div 中提供填充、带有内联样式的边距。我尝试使用css,我无法理解只有颜色发生了变化。
我发现的大部分信息都是打印出它所在的整个页面。
答:
-2赞
Muto Cartoon Kids
11/18/2023
#1
FormDataPrint.jsx
:
import React, { forwardRef } from "react";
import { Card } from "reactstrap";
const FormDataPrint = forwardRef((props, ref) => {
const { data } = props;
const divStyle = {
color: "blue", // Example color change
padding: "10px", // Example padding
margin: "5px", // Example margin
};
return (
<Card style={divStyle} ref={ref}>
<p>Name: {data.name}</p>
<p>Surname: {data.surname}</p>
</Card>
);
});
export default FormDataPrint;
FormData.jsx
:
import { Fragment, useRef } from "react";
import FormDataPrint from "../Printer/FormDataPrint";
import ReactToPrint from "react-to-print";
import { Card, Button } from "reactstrap";
import { Printer } from "react-feather";
const FormData = ({ data }) => {
const formDataPrintRef = useRef();
const handlePrint = () => {
const formDataPrint = formDataPrintRef.current;
if (formDataPrint) {
formDataPrint.handlePrint();
}
};
return (
<Fragment>
{/* This is Form Area (Input etc.) */}
<Card>
<div className="d-flex justify-content-end mt-1">
<ReactToPrint
trigger={() => (
<Button
className="ms-1 text-center"
outline
color="primary"
onClick={handlePrint}
>
<Printer style={{ marginRight: "5px" }} size={20} />
<span>Print</span>
</Button>
)}
content={() => formDataPrintRef.current}
/>
<div style={{ display: "none" }}>
<FormDataPrint ref={formDataPrintRef} data={data} />
</div>
</div>
</Card>
</Fragment>
);
};
export default FormData;
现在,在这个修改后的组件中,我已使用对象将样式直接应用于组件。您可以根据需要自定义这些样式。FormDataPrint
Card
divStyle
评论
1赞
Drew Reese
11/19/2023
这是怎麽?答案通常带有对问题/问题的某种解释以及如何解决它。这只是代码。任何人都应该从中理解什么?
评论