【发布时间】:2016-08-02 01:49:18
【问题描述】:
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 友好?
【问题讨论】:
标签: node.js reactjs socket.io flux isomorphic-javascript