我刚刚开始研究ReactJS,发现它提供了两种呈现页面的方法:服务器端和客户端.但是,我不明白如何一起使用它.构建应用程序有两种不同的方法,还是可以一起使用?

如果我们可以一起使用它,如何做到这一点——我们需要在服务器端和客户端复制相同的元素吗?或者,我们可以只在服务器上构建应用程序的静态部分,在客户端构建应用程序的动态部分,而不必连接到已经预呈现的服务器端吗?

推荐答案

对于给定的网站/web应用程序,可以使用react client-sideserver-sideboth.

客户端

在这里,你完全是在浏览器上运行ReactJS.这是最简单的设置,包括大多数示例(包括http://reactjs.org上的示例).服务器呈现的初始HTML是一个占位符,一旦加载所有脚本,整个UI就会呈现在浏览器中.

服务器端

把ReactJS想象成服务器端的模板引擎(比如jade、Handlebar等等).服务器呈现的HTML包含应有的UI,您不必等待任何脚本加载.你的页面可以被搜索引擎索引(如果一个搜索引擎不执行任何javascript).

由于UI是在服务器上呈现的,因此所有事件处理程序都无法工作,并且没有交互性(您有一个静态页面).

二者都

这里,初始渲染在服务器上.因此,浏览器接收到的HTML具有应有的UI.加载脚本后,虚拟DOM将再次重新呈现,以设置组件的事件处理程序.

在这里,您需要确保使用与在服务器上渲染相同的props来重新渲染完全相同的虚拟DOM(根JS组件).否则,ReactJS会抱怨服务器端和客户端虚拟DOM不匹配.

由于ReactJS在重新渲染之间区分虚拟DOM,因此真实DOM不会发生变化.只有事件处理程序绑定到真正的DOM元素.

Node.js相关问答推荐

可以删除一个mongodb catch块

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

MongoDB的方面查询的Postgres类似功能

Webpack:如何避免导出函数的重命名?

密码加密的最佳实践是什么?

NodeJS `request` 库无法通过 multipart-form-data 将文件发布到 dotnet 服务器

如何获取文件的中间值?

多字段传递获取查询失败

无法关闭 node.js 中的mongoose 连接

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

MongoDB 根据使用聚合的条件从嵌套数组中删除对象

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

NodeJS 后端发布请求将数据作为NULL值发布到 SQL Server 表

Node.js 大文件上传到 MongoDB 阻塞了事件循环和工作池

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

Handlebars:访问已被拒绝解析来自的属性,因为它不是其父级的自己的属性

Webpack TypeScript module.hot 不存在

在多个 .env 文件之间切换,例如 .env.development 和 node.js

如何让should.be.false语法通过 jslint?

npm install 给出警告,npm audit fix 不起作用