javascript - 我如何重构我的 React 组件以接受一系列错误并在 error.show = true 时显示错误消息对于这些错误中的任何一个
问题描述
现在我的 ReactLoader
组件只接受一个错误对象。因此,如果有多个错误条件,我必须编写一个条件语句,将这些错误减少为一个错误。
class Loader extends Component {
static displayName = 'Loader';
static propTypes = {
error: PropTypes.object,
loaded: PropTypes.bool.isRequired,
noData: PropTypes.object,
render: PropTypes.func.isRequired
};
get spinner() {
const {
loaded
} = this.props;
return <Spinner show = {!loaded
}
/>;
}
get component() {
const {
loaded,
noData,
render
} = this.props;
if (!loaded && !this.hasError) {
return this.spinner;
}
if (!loaded && this.hasError) {
return this.serviceError;
}
// Handles API returning no data scenario
if (loaded && !this.hasError && noData) {
return this.serviceError;
}
return render();
}
get hasError() {
const {
error
} = this.props;
if (!error) {
return false;
}
return error.show;
}
get serviceError() {
const {
noData
} = this.props;
if (this.hasError) {
return <ServiceError / > ;
}
return <ServiceError { ...noData
}
noIcon = {
true
}
/>;
}
render() {
return this.component;
}
}
export default Loader;
如果 error.show = true 对于这些错误中的任何一个,我怎样才能Loader
接受一系列错误并显示错误消息?
解决方案
您可以使用array.some方法来检查一个或多个元素是否符合您的条件。这样的事情应该让你朝着正确的方向前进:
class Loader extends Component {
static displayName = 'Loader';
static propTypes = {
error: PropTypes.array,
loaded: PropTypes.bool.isRequired,
noData: PropTypes.object,
render: PropTypes.func.isRequired
};
get spinner() {
const {
loaded
} = this.props;
return <Spinner show = {!loaded
}
/>;
}
get component() {
const {
loaded,
noData,
render
} = this.props;
if (!loaded && !this.hasError) {
return this.spinner;
}
if (!loaded && this.hasError) {
return this.serviceError;
}
// Handles API returning no data scenario
if (loaded && !this.hasError && noData) {
return this.serviceError;
}
return render();
}
get hasError() {
const {
error
} = this.props;
return error.some(el => el.show === true);
}
get serviceError() {
const {
noData
} = this.props;
if (this.hasError) {
return <ServiceError / > ;
}
return <ServiceError { ...noData
}
noIcon = {
true
}
/>;
}
render() {
return this.component;
}
}
export default Loader;
推荐阅读
- java - 看不到客户服务 - Backoffice Migration Hybris
- layout - 在 SAPUI5 中设计布局
- twilio - Twilio 状态回调 url (webhook) 是同步的还是异步的
- python - 有什么方法可以读取 .docx 文件,包括使用 python-docx 自动编号
- python - 如何在 DBSCAN 中将包含分类数据和连续数据的数据集放入用户定义的度量函数中?
- c# - 嵌入 UserControl 的 Grid.Row 值的数据绑定不会更新 GUI
- sql - 从表中获取与列完全匹配的记录
- html - 无法在 SVG 中显示度数字符 (°)
- javascript - Visual Studio 不为 ASP.Net 的班级成员提供建议
- firebase - Firebase 安全规则仅读取特定项目