首页 > 解决方案 > 派生一个子进程并将反应组件作为参数传递

问题描述

我们有自己的支持 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:类型无效——需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:对象。
错误:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件),但得到:对象。

标签: javascriptnode.jsreactjsforkserver-side-rendering

解决方案


推荐阅读