Learn how to use the ‘branch’ and ‘renderComponent’ higher-order components to show errors or messaging when your component is in a non-optimal state. Avoid putting extraneous logic to show errors or messaging into your core component by organizing your non-optimal states into custom higher-order components.

import React from 'react';
import { lifecycle, branch, compose, renderComponent } from 'recompose'; const User = ({ name, status }) =>
<div className="User">{ name }—{ status }</div>; const withUserData = lifecycle({
componentDidMount() {
fetchData().then(
(users) => this.setState({ users }),
(error) => this.setState({ error })
);
}
}); const UNAUTHENTICATED = ;
const UNAUTHORIZED = ;
const errorMsgs = {
[UNAUTHENTICATED]: 'Not Authenticated!',
[UNAUTHORIZED]: 'Not Authorized!',
}; const AuthError = ({ error }) => error.statusCode && <div className="Error">{ errorMsgs[error.statusCode] }</div>; const NoUsersMessage = () =>
<div>There are no users to display</div>; // Mock Service
const noUsers = [];
const users = [
{ name: "Tim", status: "active" },
{ name: "Bob", status: "active" },
{ name: "Joe", status: "inactive" },
{ name: "Jim", status: "pending" },
];
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
// reject({ statusCode: UNAUTHENTICATED });
// reject({ statusCode: UNAUTHORIZED })
// resolve(noUsers);
resolve(users);
}, );
});
} const hasError = ({error}) => error && error.statusCode;
const hasNoUser = ({users}) => users && users.length === ; const enhance = compose(
withUserData,
branch(hasError, renderComponent(AuthError)),
branch(hasNoUser, renderComponent(NoUsersMessage)),
); const User6 = enhance(({users}) => (
<div className="UserList">
{ users && users.map((user) => <User {...user} />) }
</div>
)); export default User6;

最新文章

  1. ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体
  2. &lt;&lt;&lt; MyEclipse软件中的快捷键
  3. 经典的javascript函数实例,css的. #区别
  4. 七、Android学习第六天——SQLite与文件下载(转)
  5. TeXmacs - 所见即所得 - 专业排版软件
  6. [问题2015S08] 复旦高等代数 II(14级)每周一题(第九教学周)
  7. MySQL高可用方案选型参考
  8. [威客任务]¥800.00 JS实现网站联动三级选项
  9. centos6.6 install
  10. Flowplayer-一款免费的WEB视频播放器 转 - helloweba.com
  11. json对象转字符串与json字符串转对象
  12. jsp 配置MySQL服务器 以及数据的插入和读取
  13. 使用SQLServer 2008的CDC功能实现数据变更捕获
  14. 手把手教你搭建 vue 环境
  15. 【Richard 的刷(水)题记录】
  16. 福州大学软件工程1916|W班 第3次作业成绩排名
  17. app 性能
  18. MT【176】两两乘积
  19. 【BZOJ2668】[cqoi2012]交换棋子 费用流
  20. Kafka集群部署 (守护进程启动)

热门文章

  1. Chormium线程模型及应用指南
  2. 体验SUSE (附视频演示)
  3. Android连接socket服务器上传下载多个文件
  4. BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)
  5. 洛谷 P1689 方程求解
  6. [Javascript AST] 4. Continue: Report ESLint error
  7. easy ui 验证
  8. JSP与Servlet的介绍说明
  9. 2016最热门的PHP框架(一共五款)
  10. Day1:注释