React 服务端渲染
得益于 virtual DOM 和 jsx, React 并不需要依赖于 DOM, 所以能在服务器上渲染 React 应用, 并且向客户端发送 HTML 代码.
Babel es6+
Node 目前只支持部分 es6 特性,我们需要 Babel 把代码转换一次,新建 .babelrc
文件
为了自动转换代码,我们使用 gulp
Async
React 在 server 中的 Lifecycle 有些不一样, 因为服务器对客户端是单向的,这样基本上只会出输出我们在 jsx 中定义好的 markup 代码,异步请求的数据并不会被渲染,所以我们需要定义一些钩子,让异步请求完成后再向客户端发送数据。
React + Redux + React Router + immutable 应该是现在最稳定和常见的 React 应用组合,下面将以这个为例子:
Middleware
在 redux 中加入 promise middleware, 自动处理含有 promise 的 action:
Action
在 action 中添加 promise:
Reducer
middleware 会自动添加 promise 中各种状态的 action type, 所以在 reducer 中直接处理:
Container
在 Container 中加入 promises 钩子:
Server
在当前 route component 的所有 promise resolve 后才会向客户端发送数据