javascript - 派生一个子进程并将反应组件作为参数传递
问题描述
我们有自己的支持 SSR 的反应框架。目前,如果我们向容器发出更多请求,可能会因为 renderToString 而出现延迟,以避免尝试将fork
(nodejs 功能)renderToString
操作作为子进程。在这种情况下,无法在send
方法中传递组件。如果我在send
方法中传递一个组件,然后在 childProcess 中将其作为对象接收。此外,该组件将基于路由动态。有没有办法做到这一点?
服务器渲染.jsx
const WrapperComponent = (
<RootApp
preloadedState={ ssrPreLoadState }
request={ { url: request.url} }
/>
);
const renderMarkup = fork(path.resolve(__dirname, 'forkRenderToString'));
const forked = await new Promise(function(resolve) {
renderMarkup.send(WrapperComponent);
renderMarkup.once('message', (res) => {
resolve(res);
});
});
forkRenderToString.js
process.on('message', (Component) => {
console.log('Component', Component);
const children = renderToString(<Component />)
process.send(children);
});
错误详情
警告:React.createElement:类型无效——需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:对象。
错误:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件),但得到:对象。
解决方案
推荐阅读
- python - 是否可以计算 AWS s3 对象的 sha256 或 sha1 哈希?
- firebase - 在 Firestore 安全规则中列出类型安全
- python - replace() 在 for 循环中不接受关键字参数
- regex - 我的正则表达式查找 IP 有效,但如何排除某些 IP
- schema.org - 在 JSON-LD 标记中验证组织徽标时未解决的错误:“需要‘url’字段的值。”
- node.js - 无法使用 formData 和 axios post 请求将图片文件发送到后端
- terraform - terragrunt 不接受 vars 文件
- java - 我的 android studio 项目中发生错误.....在谷歌上找不到解决方案
- sql - 对每行值 1 个结果执行选择性查询(每个表有多个行值)
- python-3.x - 如何将已拆分的 csv 列中的数据放入 csv 文件中的不同行