Javascript 异步返回Apollo客户端服务器上的空标记
在服务器上,我试图使用Javascript 异步返回Apollo客户端服务器上的空标记,javascript,reactjs,apollo-client,server-side-rendering,react-helmet,Javascript,Reactjs,Apollo Client,Server Side Rendering,React Helmet,在服务器上,我试图使用react Helmet async从嵌套的子组件获取头盔元标记和标题标记,因为react Helmet不起作用。但这似乎也不起作用,我总是得到一个空的标题标记,没有返回任何元标记(它们都设置在子组件中) const helmetContext={}; 常量应用=( ); //遍历组件树并执行所有查询 getDataFromTree(应用程序)。然后(()=>{ const content=ReactDOMServer.renderToString(应用程序); const
react Helmet async
从嵌套的子组件获取头盔元标记和标题标记,因为react Helmet
不起作用。但这似乎也不起作用,我总是得到一个空的标题标记,没有返回任何元标记(它们都设置在子组件中)
const helmetContext={};
常量应用=(
);
//遍历组件树并执行所有查询
getDataFromTree(应用程序)。然后(()=>{
const content=ReactDOMServer.renderToString(应用程序);
const state=client.extract();
const{helmet}=helmetContext;//始终为空
const html=ReactDOMServer.renderToString(
,
);
物质状态(200);
res.send(`${html}`);
res.end();
}).catch(e=>{
console.error('呈现错误:',e);
物质状态(500);
console.log(e.stack);
res.end(
`发生错误。:\n\n${
e、 堆叠
}`
);
});`
关于如何从子组件访问嵌套头盔标记的任何帮助。我正在使用
HelmetProvider
在客户端包装应用程序。它在客户机上工作得非常好,但在服务器上它不会从嵌套组件中拾取任何标记。我不是流式传输响应,这是一个简单的SSR设置。这有点违背了建立SSR的目的,因此我非常感谢您的帮助。谢谢 结果证明,这是由于组件根本无法渲染的一个无关问题造成的<代码>异步在正确加载内容的页面上运行良好。
const helmetContext = {};
const app = (
<ApolloProvider client={client}>
<HelmetProvider context={helmetContext}>
<Router location={req.url} context={staticContext}>
<CookiesProvider cookies={req.universalCookies}>
<App />
</CookiesProvider>
</Router>
</HelmetProvider>
</ApolloProvider>
);
//Traverses Component tree and executes all queries
getDataFromTree(app).then(() => {
const content = ReactDOMServer.renderToString(app);
const state = client.extract();
const { helmet } = helmetContext; // This is always empty
const html = ReactDOMServer.renderToString(
<Html content={content} helmet={helmet} assets={assets} state={state} initData={initData}/>,
);
res.status(200);
res.send(`<!doctype html>${html}`);
res.end();
}).catch(e => {
console.error('RENDERING ERROR:', e);
res.status(500);
console.log(e.stack);
res.end(
`An error occurred.:\n\n${
e.stack
}`
);
});`