【发布时间】:2020-02-22 12:43:06
【问题描述】:
我正在尝试在我的反应应用程序中使用 Formik。我有用 ts 编写的登录组件。出于某种原因,Formik 中的 Form 元素会引发以下错误:
错误 TS2559 (TS) 类型 '{ children: Element[]; }' 中没有属性 与类型 'IntrinsicAttributes & 通用 RefAttributes'。
我想知道如何缓解这个问题。有什么解决办法吗?
<div>
<Form></Form> // NO ERROR
<h4>Login</h4>
<Formik
initialValues={{
username: '',
password: ''
}}
validationSchema={Yup.object().shape({
username: Yup.string().required('Username is required'),
password: Yup.string().required('Password is required')
})}
onSubmit={({ username, password }, { setStatus, setSubmitting }) => {
setStatus();
authenticationService.login(username, password)
.then(
result => {
console.log(result);
console.log(typeof result);
if (result.status == '500') {
setSubmitting(false);
setStatus("Login failed.");
} else if (result.status == '200') {
if (result.data["roles"].result.includes('Admin'))
history.push('/admin/courses');
history.push('/courses');
}
},
error => {
setSubmitting(false);
setStatus(error);
}
);
}}
render={({ errors, status, touched, isSubmitting }) => (
<Form> // ERROR!!!
<div className="form-group">
<label htmlFor="username">Username</label>
<Field name="username" type="text" className={'form-control' + (errors.username && touched.username ? ' is-invalid' : '')} />
<ErrorMessage name="username" component="div" className="invalid-feedback" />
</div>
<div className="form-group">
<label htmlFor="password">Password</label>
<Field name="password" type="password" className={'form-control' + (errors.password && touched.password ? ' is-invalid' : '')} />
<ErrorMessage name="password" component="div" className="invalid-feedback" />
</div>
<div className="form-group">
<button type="submit" className="btn btn-primary" disabled={isSubmitting}>Login</button>
{isSubmitting && <LoadingSpinner />}
</div>
{
status &&
<div className={'alert alert-danger'}>Login failed.</div>
}
</Form>
)}
/>
/>
</div>
【问题讨论】:
-
在渲染函数中返回空表单是否可以正常工作?如果是,请尝试逐个添加 div 部分
标签: reactjs forms typescript formik