【发布时间】:2018-11-16 20:13:23
【问题描述】:
我正在尝试实现https://www.youtube.com/watch?v=5gl3cCB_26M 中描述的方法,其中所有 Redux 操作都只是普通对象(正如它们的本意那样),API 调用由中间件完成。
通过这样做,分派的操作不再是 thunk 并且不能返回 Promise。因此,我将无法在提交处理程序中使用 Formik 的 setSubmitting(将 isSubmitting 标志设置为 false),就像我发现的 Formik 文档和其他教程中的代码示例一样。
我以一种丑陋的方式解决了这个问题,保存了 setSubmitting 的引用以便稍后在 componentDidUpdate 中运行它:
import React, { Component } from 'react'
import { Redirect } from 'react-router-dom'
import LoginForm from 'path/to/LoginForm'
import validationSchema from 'path/to/LoginForm/validationSchema'
import { login } from 'path/to/actionCreators'
const initialValues = {
email: '',
password: '',
}
class LoginPage extends Component {
componentDidUpdate() {
const { auth } = this.props
if (!auth.isProcessing && this.setSubmitting) {
this.setSubmitting(false)
}
}
onSubmit = (values, { setSubmitting }) => {
const { dispatch } = this.props
dispatch(login(values)))
this.setSubmitting = setSubmitting
}
render() {
const { auth } = this.props
if (auth.user.uid) {
return <Redirect push to="/" />
}
return (
<div className="login-panel">
<h1>Login</h1>
<Formik
initialValues={initialValues}
onSubmit={this.onSubmit}
render={LoginForm}
validationSchema={validationSchema}
/>
</div>
)
}
}
const mapStateToProps = state => ({
auth: state.auth,
})
export default connect(mapStateToProps)(LoginPage)
我怎样才能以更“优雅”的方式做到这一点?
【问题讨论】:
标签: reactjs redux middleware formik