问题是,应该给予打印选项的按钮不再工作了。
控制台中的错误显示:
To print a functional component ensure it is wrapped with `React.forwardRef`, and ensure the forwarded ref is used. See the README for an example: https://github.com/gregnb/react-to-print#examples
我已经看到一些解决方案专门谈论同样的问题,但我一直未能使它的工作。
有什么建议吗?
这是我正在使用的库:ReactToPrint npm
对打印做出React
import { useRef } from "react";
import { useReactToPrint } from "react-to-print";
import Resume from "./Pdf/Pdf";
const Example = () => {
const componentRef = useRef();
const handlePrint = useReactToPrint({
content: () => componentRef.current
});
return (
<div >
<button onClick={handlePrint}> ------> NOT WORKING!
Descargar Pdf
</button>
<Resume ref={componentRef} /> ------> COMPONENT TO PRINT
</div>
);
};
export default Example;
要打印的组件
import React from "react";
import styled from 'styled-components';
import PdfSection from './PdfSection';
import AlienLevel from './AlienLevel';
import {connect } from 'react-redux';
class Resume extends React.Component {
renderList = () => {
return this.props.posts.diagnose.map((post) => {
return (
<PdfSection
key={post.id}
id={post.id}
divider={"/images/pdf/divider.png"}
img={"/images/alienRandom.png"}
title={post.title}
// data={post.data}
text={post.text0}
subtext={post.subtext0}
/>
);
});
};
render(){
return (
<div>
<Container>
<Page>
<Portada>
<img id="portada" src="/images/pdf/PortadaPdf.png" />
</Portada>
</Page>
<Page>
<AlienLevel
result= "{props.diagn}{"
character={"/images/pdf/alienMedio.png"}
fileName={"responseBody[4].data"}
level={"/images/pdf/level6.png"}
correct={"/images/pdf/correct.png"}
medium={"/images/pdf/medium.png"}
incorrect={"/images/pdf/incorrect.png"}
text='"Necesitas mejorar tus prácticas intergalácticas de CV, pero ya eres nivel medio!"'
/>
<div>{this.renderList()}</div>
</Page>
</Container>
</div>
);
};
}
const mapStateToProps = (state) => {
return { posts: state.posts };
};
export default connect(mapStateToProps)( Resume);
先谢谢你!
3条答案
按热度按时间dz6r00yl1#
问题出在
react-redux
的connect()
函数上。您将组件 Package 在connect
中,而connect
默认情况下不转发引用。这意味着,您在这里传递的引用<Resume ref={componentRef} />
没有到达您的组件。您需要在连接函数
connect(mapStateToProps?, mapDispatchToProps?, mergeProps?, options?)
的第四个参数中传递选项{ forwardRef: true }
。只需将
Resume
组件中的代码export default connect(mapStateToProps)(Resume);
更改为export default connect(mapStateToProps, null, null, { forwardRef: true })(Resume);
wbrvyc0a2#
对于任何人是挣扎与同样的错误,似乎他们找到了正确的方法来解决这个问题,我实际上解决了它,通过以下代码框,我发现在Github的问题在这里si的链接。希望是有用的!--〉
LINK TO GITHUB SPECIFIC ISSUE (SOLVED!!)
olhwl3o23#
我也遇到了同样的问题,我很高兴能尽快分享我的发现。组件必须使用ref在某个地方呈现。
我使用React Material UI's Backdrop将其添加到我的页面中作为隐藏。或者你可以使用钩子将其隐藏,如下面的示例。
使用背景,并且只在需要预览打印时调用它。👇👇
使用挂钩和显示样式设置仅在需要时显示。👇👇
注意:我使用了MUI组件,如果你决定复制粘贴,那么将按钮改为html〈按钮,将纸张改为〈div。希望这对你有帮助。