У меня есть компонент, который отображает форму входа. Когда пользователь нажимает кнопку входа, чтобы отправить свои учетные данные, они аутентифицируются серверной службой, и я получаю ответ или ошибку. Когда я получаю сообщение об ошибке, я хочу отобразить простое сообщение об ошибке. Однако у меня возникли проблемы с выяснением, как передать значение флага компоненту после отправки.
const initialValues = {
username: '',
password: '',
invalidCred: false,
}
class LoginForm extends Component<InjectedFormikProps<Props, Values>, State> {
readonly state = initialState
render() {
const { classes, values, errors, handleChange, handleSubmit } = this.props
return (
<form className={classes.container}>
<Grid container>
<Grid item xs={12} className={classes.grid}>
{values.invalidCred && (<div>I got issues man</div>)}
<TextField
fullWidth
data-cy="login-username"
name="username"
/>
</Grid>
<Grid item xs={12} className={classes.grid}>
<TextField
fullWidth
data-cy="login-password"
name="password"
/>
</Grid>
<Grid item xs={12} className={classes.grid}>
<Button
disabled={false}
fullWidth
color="primary"
variant="outlined"
data-cy="submit"
onClick={() => handleSubmit()}
className={classes.submit}>
Sign In
</Button>
</Grid>
</Grid>
</form>
)
}
}
const LoginFormEnhanced = withFormik<Props, Values>({
validationSchema,
mapPropsToValues: (props: Props) => initialValues,
handleSubmit: async (values: Values, { props, setSubmitting }: FormikBag<Props, Values>) => {
const { username, password } = values
await props.request({ username, password })
const [error, response] = await to<AxiosResponse<any>, ServerResponseError>(AuthService.login(username, password))
setSubmitting(false)
if (response) {
await props.success({ username, password })
props.populate(getUserObj(response.data) as Profile)
props.history.push('/')
}
if (error) {
values.invalidCred = true <---- THIS IS THE FLAG I WANT TO PASS TO THE COMPONENT IF AN ERROR OCCUS
props.failure()
}
}
})(LoginForm)
Как я могу изменить состояние формы в функции handleSubmit () после неудачного входа в систему, чтобы установить для флага invalidCreds значение true?