我正在使用react创建一个示例页面,该页面使用renderToString()为SEO友好页面提供服务器端渲染。
是我的server.js代码
app.get('*', (req, res) => {
match(
{ routes, location: req.url },
(err, redirectLocation, renderProps) => {
// in case of error display the error message
if (err) {
return res.status(500).send(err.message);
}
// generate the React markup for the current route
let markup;
if (renderProps) {
markup = renderToString(<RouterContext{...renderProps}/>);
} else {
res.status(404);
}
// render the index template with the embedded React markup
return res.render('index', { markup });
}
);
});
我的页面是搜索页面,这是静态的最初,当用户输入输入,它从后端获取数据,并呈现在同一页面的组件列表。
当我在浏览器中看到view page source时,我只能看到初始的静态内容,而不是后端响应后呈现的html列表。
当组件状态发生变化时,获取更新后的HTML的正确方法是什么?
您仍然需要在客户端包含您的组件和React本身,并在DOM中相同的基本元素上调用React.render
。
简单地将React.renderToString
的结果作为静态HTML所做的,只会做到这一点,服务静态 HTML。
如果你想让你的组件正确地挂载在客户端,这样它就可以对客户端事件做出反应并重新呈现状态变化,你需要将它挂载在静态html上,这是通过在客户端页面加载时调用React.render
来完成的。
这里有更多的信息:https://strongloop.com/strongblog/node-js-react-isomorphic-javascript-why-it-matters/
将获取的数据保存到您的状态,组件将重新呈现自己。这样,当从后端获取新内容时,视图将呈现新内容。