- 发布历史
- 版本特性
- egg-view-react-ssr
- egg-view-react-ssr 标准化 render 和简化 asyncData 方式
- egg-view-react-ssr 3.x.x 插件 Stateless Component SSR 支持
- asyncData 数据请求支持">egg-view-react-ssr 3.x.x 插件 asyncData 数据请求支持
- egg-view-react-ssr 2.x.x 插件 Callback Promise 数据请求逻辑
- egg-view-react-ssr 标准化 render 和简化 asyncData 方式
- easywebpack 体系通过 @easy-team 模式内置 Babel 7 方案
- Egg + React + Nunjucks 自定义纯前端渲染方案支持
发布历史
https://github.com/easy-team/egg-react-webpack-boilerplate/blob/master/CHANGELOG.md
版本特性
egg-view-react-ssr
发布 egg-view-react-ssr@3.0.0 和 egg-webpack-react@3.0.0 插件,主要包括:
- Node 最低版本为 8 ( 2.x.x 最低版本为 6)
- React SSR 支持 asyncData Hook 模式,不再支持 Promise Callback 方式
- React SSR 支持 Statelss Component 渲染
- egg-view-react-ssr 配置 layout 配置由 layout.js 改成 layout.html
- 升级 egg-react 相关骨架, 相关案例见 egg-react-webpack-boilerplate
egg-view-react-ssr 标准化 render 和简化 asyncData 方式
egg-view-react-ssr 3.x.x 插件 Stateless Component SSR 支持
import React, { Component } from 'react';
export default (props) => {
return <div>
<div className="main">
<div className="page-container page-component">
<h1>{props.text}</h1>
</div>
</div>
</div>;
};
egg-view-react-ssr 3.x.x 插件 asyncData 数据请求支持
在 egg-view-react-ssr 3.x.x 版本时,React SSR 组件直接定义 static asyncData function 方式实现异步逻辑调用(React Render 时,会检测是否存在 asyncData 方法),egg-view-react-ssr 2.x.x 插件 Callback Promise 方式不再支持,请用 asyncData 模式改造支持。代码大概如下:
import React, { Component } from 'react';
class AsyncDataMode extends Component {
static async asyncData(locals) {
const res = await axios.get('/test/api/article');
return res.data;
}
render() {
const { title, article } = this.props;
return <div>
<h1 className="easy-article-detail-title">{title}</h1>
<h2 className="easy-article-detail-title">{article.title}</h2>
<div className="easy-article-info">
<iframe src={article.url} frameBorder="0" width="100%" style={{minHeight: '800px'}}></iframe>
</div>
</div>;
}
}
export default AsyncDataMode;
egg-view-react-ssr 2.x.x 插件 Callback Promise 数据请求逻辑
在 egg-view-react-ssr 2.x.x 版本时,React SSR 入口时是通过 callback 返回 Promise 方式实现异步逻辑调用,代码大概如下:
server(config) {
return context => {
const { Entry, createRouter, createStore } = config;
const url = context.state.url;
const router = createRouter();
const matchRoute = matchRoutes(router, url);
const promises = matchRoute.map(({ route }) => {
const asyncData = route.component.asyncData;
return asyncData instanceof Function ? asyncData(context, route) : Promise.resolve(null)
});
return Promise.all(promises).then(list => {
const data = list.reduce((item, result) => {
return Object.assign(result, item);
}, {});
Object.assign(context.state, data);
const store = createStore(context.state);
return () => {
return <Provider store={store}>
<StaticRouter location={url} context={{}}>
<Entry url={url} />
</StaticRouter>
</Provider>
}
});
};
}
easywebpack 体系通过 @easy-team 模式内置 Babel 7 方案
骨架分支: master,版本 4.6.0
- @easy-team/easywebpack 提供内置 babel 7 升级方案,主要修改如下:
- easywebpack-cli > @easy-team/easywebpack@^4.0.0
- easywebpack-react > @easy-team/easywebpack-react@^4.0.0
- .babelrc 配置升级为 babel 7 配置 babel.config.js
Egg + React + Nunjucks 自定义纯前端渲染方案支持
骨架分支: feature/green/html
- 提供 egg 模板引擎 (egg-view-nunjucks 或 egg-view-ejs) + Webpack 完全自定义前端方案 https://www.yuque.com/easy-team/egg-react/html