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