React同构

React同构

javascript同构是什么

让javascript代码在客户端和服务器端都能运行

关键是什么

mvc的框架是在DOM加载的时候渲染,这个当然也可以显示,但是会带来不好的用户体验。
另一个问题是MVC框架里面内容是不能被搜索引擎搜索到的(除非给钱给第三方服务),如果你的app提供一些用户需要搜索的数据,那就悲剧了。
但是当你在服务器端渲染javascript代码,就能解决这些问题,是不是觉得很酷。。。。

同构的好处

  1. 好的用户体验
  2. 可被搜索引擎索引
  3. 更容易维护
  4. 免费的渐进增强(这个如何解释?)

教程

https://www.youtube.com/watch?v=8wfY4TGtMUo
在server.js中安装jsx。

// Make sure to include the JSX transpiler
require("node-jsx").install();

然后如果你的组件是在一个单独的文件中,你需要使用module.exports导出你的组件。
然后确保调用React.createFactory,将你的组件在服务器端渲染出来。

/** @jsx React.DOM */

var React = require('react/addons');

/* create factory with griddle component */
var Griddle = React.createFactory(require('griddle-react'));

var fakeData = require('../data/fakeData.js').fakeData;
var columnMeta = require('../data/columnMeta.js').columnMeta;
var resultsPerPage = 100;

var ReactApp = React.createClass({

      componentDidMount: function () {
        console.log(fakeData);
      },

      render: function () {
        return (
          <div id="table-area">
             <Griddle results={fakeData} columnMetadata={columnMeta} resultsPerPage={resultsPerPage} tableClassName="table"/>
          </div>
        )
      }
  });

/* Module.exports instead of normal dom mounting */
module.exports.ReactApp = ReactApp;
/* Normal mounting happens inside of /main.js and is bundled with browerify */

现在,当你在路由里面使用React.renderToString时,奇迹就会发生。。。

var React = require('react/addons');
var ReactApp = React.createFactory(require('../components/ReactApp').ReactApp);

module.exports = function(app) {
    app.get('/', function(req, res){
        // React.renderToString takes your component
        // and generates the markup
        var reactHtml = React.renderToString(ReactApp({}));
        // Output html rendered by react
        // console.log(myAppHtml);
        res.render('index.ejs', {reactOutput: reactHtml});
    });
};

将reactOutput变量传递到template模板中。

<!doctype html>
<html>
  <head>
    <title>React Isomorphic Server Side Rendering Example</title>
    <link href='/styles.css' rel="stylesheet">
  </head>
  <body>
    <h1 id="main-title">React Isomorphic Server Side Rendering Example</h1>
    <!-- reactOutput is the server compiled React Dom Nodes -->
    <!-- comment out reactOutput to see empty non indexable source in browser -->
    <div id="react-main-mount">
      <%- reactOutput %>
    </div>

    <!-- comment out main.js to ONLY see server side rendering -->
    <script src="/main.js"></script>
  </body>
</html>

注意:因为这些文件是js后缀而不是jsx后缀的,所以使用React.createFactory来包含组件。想知道原因,看这里

Demo安装指引

如果你想下载代码自己尝试


  1. clone这个仓库:git clone git@github.com:HelloClicky/helloClicky.git
  2. 安装依赖包: npm install
  3. 运行代码:node server.js
  4. 在浏览器中输入网址访问:http://localhost:4444 5:想看看服务器端渲染做了什么,可以在index.ejs文件中注释掉main.js,然后你就会看到服务器端生成了什么内容。

上面的仓库貌似不能访问,请访问这里https://github.com/DavidWells/isomorphic-react-example

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 Node 的 JavaScript 同构解决方案。提供了 saber 的服务端运行环境,使其具备从 SPA 到 MPA,从前端渲染到后端渲染的深度响应式能力。Rebas 使首屏渲染由服务器端完成,极大地降低了 SPA 首屏的白屏时间并解决了 SEO 问题。借助于 node ,服务器端的渲染逻辑不用额外开发,只需要对现有的 Saber 应用进行小幅修改就能让已有的逻辑同时运行在客户端与服务器端。Saber 所有的基础组件都进行了同构升级,确保能同时运行在客户端与服务器端。对于业务开发只需聚焦业务逻辑,不用特别关注运行平台,剩下的一切就交给 Saber 与 Rebas 吧~同构浏览器不再是唯一的用武之地了,从现在开始,欢迎进入崭新的全栈时代!借助于 MVP 良好的逻辑分层与众多 saber 模块的同构化努力,您的应用能无缝地同时运行在 Node 平台与客户端浏览器中,为您带来前所未有的编程体验。平台无关的代码既能运行在服务器端提供良好地 SEO 优化与首屏渲染速度,也能同时运行在浏览器中提供流畅的,无刷新、全异步交互体验。写一份代码,两处运行,不止双倍的爽快~深度响应式得利于框架的平台扩展,我们进一步扩张了响应式的意义,不仅考虑终端的屏幕尺寸,更关乎应用的整体体验,更充分地 为用户的体验服务,根据具体的前端运行环境(浏览器版本)选择最合适的运行模式,让您的应用即能为中端浏览器提供最佳的单页面应用体验,也能充分照顾到 低端浏览器为其提供更为有效的多页面应用体验。这一切都无关业务逻辑,rebas 会默默地在幕后帮您漂亮地解决掉~ 标签:rebas

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值