如何向react-pdf/renderer的renderToStream函数传递Props?
如何向react-pdf/renderer的renderToStream函数传递Props?
嘿,看起来你已经找对路子啦!我来帮你把传递props的正确姿势理得更清楚——其实你当前用createElement传参的方法本身是完全没问题的,不过可能有些小细节需要留意,确保props能被组件正确接收。
首先得给你点个赞,你的TestPDF组件定义很规范,不仅正确声明了message这个可选props,还做了空值兜底处理,这部分没毛病。
你现在写的renderToStream(createElement(TestPDF, { message }))写法是符合react-pdf要求的,不过如果带message时出问题,你可以从这几个方向排查:
- 先确认
message变量本身是有效的字符串,有没有被意外赋值成非字符串类型(比如对象、函数),毕竟你的组件里是直接把它渲染成文本的 - 如果你用的是TypeScript,可以显式给
createElement指定props类型,避免类型推导的小问题,比如写成createElement<{ message?: string }>(TestPDF, { message }) - 另外,如果你项目环境支持JSX(比如配置了Babel/TypeScript处理JSX),还可以用更直观的JSX语法传递props,和
createElement是完全等价的:
const stream = await renderToStream(<TestPDF message={message} />);
给你贴个完整的可运行示例,方便你对照:
import { renderToStream, createElement } from '@react-pdf/renderer'; import { TestPDF } from './TestPDF'; async function generatePDFAttachment(message?: string) { // 传递props生成PDF流 const stream = await renderToStream(createElement(TestPDF, { message })); // 这里就可以把stream传给Resend作为邮件附件了 return stream; } // 调用示例 generatePDFAttachment("这是我要在PDF里显示的消息") .then(stream => { console.log("PDF流生成成功,可用于发送附件"); }) .catch(error => { console.error("生成PDF流失败:", error); });
如果带message时出问题,你可以先单独打印message的值,确认它是符合预期的字符串,再一步步排查组件渲染的问题~
备注:内容来源于stack exchange,提问作者Santi
相关产品推荐
相关产品推荐

