我刚刚开始学习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>
);
}
};
}
有效。但是,这似乎有点复杂。有没有更简单的方法可以重用该逻辑/流程?