ReactJS,原始Flux,react-router,nodeJS,socket.io一切都是最新的。
如果我要关闭浏览器中的javascript,则仅呈现静态代码。
在服务器端渲染ComponentWillMount
和render
方法启动期间,但不启动ComponentDidMount
。
即使我将Flux逻辑放入ComponentWillMount
方法中,也不会发生任何事情:调用了操作,但是socket.io不会将请求发送到服务器以从数据库中获取数据。这意味着,不会从数据库中检索数据,也不会呈现对搜索引擎有用的数据。如果启用了javascript,则一切正常。
这里是重要的代码段:
成分。添加监听器和呼叫操作:
componentDidMount() {
StoreUser.addChangeListener(this._onChange);
Actions.getUser(this.props.params.userid)
}
客户的行为要求服务器提供用户数据:
function _getUser (userid) {
socket.emit('getUser', userid)
}
直到该位置服务器端渲染正常,但服务器本身未接收到getUser
事件,因此没有任何进一步发生。同样,如果在浏览器中启用了javascript,则所有这些都可以正常工作。服务器收到此呼叫并返回用户的数据。
如何使服务器接收此事件,返回用户数据并在发送给客户端之前呈现它?作为替代方案,是否可能有其他方法使它对SEO友好?
如docs所述, React的componentDidMount
生命周期挂钩不称为服务器端。
如果需要获取数据并在render
组件方法中在服务器端使用它,则需要像props
在初始渲染期间一样传递此数据。这意味着,componentWillMount
即使在调用该钩子的情况下,您也无法在其中获取它。
要实现所需的功能,您需要服务器端代码来:
当然,有关如何实现的细节将取决于您的流量实现,您在服务器端使用的框架等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句