javascript - 重用 React 组件的业务逻辑
问题描述
我刚刚开始学习 React,我正在努力理解一种在组件之间重用业务逻辑的好方法。
例如,一个有许多表单提交数据。工作流程始终相同:
- 填写资料;
- 点击提交;
- 显示一个带有加载消息的小吃店;
- 发送网络请求;
- 如果请求成功,那么它会显示一个带有成功消息的新快餐栏,并且在某些情况下,它会重定向到不同的路由;
- 如果请求返回错误,则会显示带有错误消息的小吃栏。
我创建了一个HOC:
function withSubmit(WrappedComponent, request, navigateTo) {
return class extends Component {
constructor() {
super();
this.state = {
snackbar: null,
navigate: null,
};
}
updateSnackbar = snackbar => this.setState({ snackbar });
handleSubmit = (...params) => {
this.updateSnackbar('Loading...');
// API request passed from the parent component to be called only after submitting a form.
request(...params)
.then(() => {
this.updateSnackbar(navigateTo.msg);
if (navigateTo.url) {
this.setState({ navigate: navigateTo.url });
}
})
.catch(err => this.updateSnackbar(err.message));
};
render() {
const { navigate, snackbar } = this.state;
return (
<div>
<WrappedComponent onSubmit={this.handleSubmit} />
<Snackbar
open={!!snackbar}
message={snackbar}
/>
{ navigate ? <Redirect to={navigate} /> : null }
</div>
);
}
};
}
有用。不过,好像有点复杂。有没有更简单的方法来重用该逻辑/流程?
解决方案
推荐阅读
- php - 如何根据访问方式显示信息
- swift - Swift 5,如何在从 Firebase 获取所有添加的子项后执行代码
- asp.net-core - IdentityServer 4 - 自定义 IExtensionGrantValidator 总是返回 invalid_grant
- c - 我已经为一个模式编写了一个 C 代码,但是我犯了一个我无法识别的小错误
- java - 为什么 Dqueue 中有 pollFirst 方法?
- python - 使用空字符串或 A 列中的值根据 B 列上的值在 Pandas 数据框中添加新列
- ruby - LoadError:无法加载此类文件(Rake 任务)
- c# - 没有样板的 C# 中的 C\C++ 默认序数 IC 字符串排序?
- verification - 是否可以将 Imperas OVP 模拟器用于带有汇编代码的 riscV?
- laravel-5.8 - 我正在尝试在 laravel 5.8 中创建外键约束