首页 存档 技术 查看内容

【第561期】基于React前后端公用的组件设计思路

2018-3-30 13:00 |来自: 互联网 279 0

摘要: 前言 本文由阿里信息平台前端@昊祯投稿。早读君在记忆中应该是第一次推送react相关的文章,本文利用前后端同构的特性来设计一个公用组件。 正文从这开始~ 越来越多的前端应用开始基于Facebook 的 React,React 在 ...

前言

本文由阿里信息平台前端@昊祯投稿。早读君在记忆中应该是第一次推送react相关的文章,本文利用前后端同构的特性来设计一个公用组件。


正文从这开始~


越来越多的前端应用开始基于Facebook ReactReact 在组件化方面有着更为灵活的实现和简便的配置,在组件的使用成本上也有很大程度的降低。


除了这些优点,了解 React 服务端渲染的同学应该还知道 React 还有一个非常大的特性前后端同构特性,本文就将基于这一特性去研究如何设计一个可以前后端公用的组件。


讲解原理之前,先来看 demo (https://github.com/harbin1053020115/koa-react-render-demo )


React 前后端同构的原理


React render() 方法定义该组件最后输出的 html 片段;前端利用 React 的内置渲染引擎将其渲染成 DOM 树,而后端也同样提供了两个方法去渲染一个 React 组件:

  • React.renderToString是把 React 元素转成一个 HTML 字符串,因为服务端渲染已经标识了reactid,所以在浏览器端再次渲染,React 只是做事件绑定,而不会将所有的 DOM 树重新渲染,这样能带来高性能的页面首次加载!同构原理主要从这个 API 而来。

  • React.renderToStaticMarkup,这个 API 相当于一个简化版的 renderToString,如果你的应用基本上是静态文本,建议用这个方法,少了一大批的 reactidDOM 树自然精简了,在 IO 流传输上节省一部分流量。


由这两个方法在服务端生成的 html 字符串输出到浏览器,浏览器生成对应的 DOM 树,然后再引用编译好的 react js 文件,再次在浏览器端进行 render


由于输出的 DOM 树结构并无改变,所以肉眼看起来页面并没有再次渲染(一些现代高级浏览器也会对页面的 DOM 树进行对比,如果 DOM 结合 CSS 的渲染树并没有改变,也不会真正进行渲染),这就是 React 实现前后端同构的主要原理。


前后端公用一套组件进行页面渲染的优势

  • 首屏速度

首屏服务端渲染的好处是可以让用户更早的见到页面主体,而且服务端渲染另外一个好处是可以减少很多 ajax 接口请求,利用 nodejs 的事件机制,也可以很方便的在 Node 端实现接口的并行异步获取。


  • 搜索引擎友好

搜索引擎只能抓取页面源代码中的字符串。


  • 成本

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部