javascript - 有没有办法强制渲染 React 组件?
问题描述
在 React 应用程序中,我想将 DOM 树渲染到画布或 PDF。
DOM 树不是活动组件,而是在路由内函数内的变量中可用。
例如:
import React from 'react';
import axios from 'axios';
function Summary(props) {
function SaveForm(){
const obj = <div>I am what is saved</div>
const obj_as_blob = ...code to save obj as canvas/pdf/blob...
axios.post('/save',obj_as_blob)
.then((resp)=>{console.log(resp)})
}
return (
<div>
<p>I am what the user sees</p>
<button onClick={SaveForm}>Send File to backend</button>
</div>
)
}
我发现的许多库(例如html2canvas)仅允许对附加到当前文档的元素进行强制访问,诸如react-pdf之类的替代方法需要对其组件的有限使用,并且不允许我在渲染步骤中使用我的组件。
最终的意图是将其obj
作为呈现的 blob 并将其发送到后端服务器进行保存。然后在以后将其提供给用户。
非常感谢您对此的任何帮助。
解决方案
在您捕获 jsx 元素之前,我有一个想法,您将放置在活动组件中的锚点,然后在将快照发送到后端时卸载它:
function Summary(props) {
const yourAnchor = React.useRef();
function save() {
const obj = <div>I am what is saved</div>;
ReactDOM.render(obj, yourAnchor.target, () => {
// your jsx finally attached to the document
const obj_as_blob = ...code to save obj as canvas/pdf/blob...
axios.post('/save',obj_as_blob)
.finally(() => {
// Unmount the node
ReactDOM.unmountComponentAtNode(yourAnchor.current);
})
});
}
return (
<div>
<div ref={yourAnchor} />
<p>I am what the user sees</p>
<button onClick={save}>Send File to backend</button>
</div>
)
}
推荐阅读
- c# - LINQ 是否存在类似于 FoxPro 的 Rushmore 的任何类型的索引?
- html - 如何从导航栏中单击锚链接并在没有 javascript 的情况下更改 div 中的内容?
- mysql - 每周查询新用户数 - 如何按年/周排序?
- windows - 建立外部连接以在 Windows 上的 docker 映像上安装 git 时出错
- azure - 在管理组中部署自定义 Azure 策略的选项
- angular - 使用 --prod 标志构建时 AngularFireFunctions 注入错误
- firebase - Firebase:突然无法再部署
- r - 如何在循环中使用 cbind 命名列
- java - `thenRunAsync(...)` 和 `CompletableFuture.runAsync(() -> { ... });` 有关系吗?
- flutter - 在颤动的标签栏的应用栏中添加返回按钮