【发布时间】:2020-03-28 15:31:15
【问题描述】:
我正在使用材料 ui 文本字段并使用 Formik 验证它们。我不想多次输入所有内容,而是想映射项目,但我无法这样做。
return (
<div>
<Formik
initialValues={{ email: '' }}
onSubmit={(values, actions) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
actions.setSubmitting(false);
}, 1000);
}}
validationSchema={schema}>
{props => {
const {
values: { email },
errors,
touched,
handleChange,
isValid,
setFieldTouched,
} = props;
const change = (name: string, e: FormEvent) => {
e.persist();
handleChange(e);
setFieldTouched(name, true, false);
};
return (
<div className="main-content">
<form
style={{ width: '100%' }}
onSubmit={e => {
e.preventDefault();
submitForm(email);
}}>
<div>
<TextField
variant="outlined"
margin="normal"
id="email"
name="email"
helperText={touched.email ? errors.email : ''}
error={touched.email && Boolean(errors.email)}
label="Email"
value={email}
onChange={change.bind(null, 'email')}
/>
{/* {[{ variant:"outlined", margin:"normal", id:"email", name:"email", label: "Email", value: email, onChange:{change.bind(null, 'email')}
].map((item, index) => (
<TextField></TextField>
))} */}
<br></br>
<CustomButton
text={'Remove User'}
/>
</div>
</form>
</div>
);
}}
</Formik>
</div>
);
目前在注释掉的部分,我在change.bindthat (property) change: (name: string, e: React.FormEvent<Element>) => void
',' expected.ts(1005) 上遇到错误
同样,如果我尝试在要映射到文本字段的参数列表中添加 helperText:{touched.email ? errors.email : ''},我会得到:
(property) touched: FormikTouched<{
email: string;
}>
',' expected.ts(1005)
在touched.email。当我尝试使用 errors.
(property) touched: FormikTouched<{
email: string;
}>
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FormikTouched<{ email: string; }>'.
No index signature with a parameter of type 'string' was found on type 'FormikTouched<{ email: string; }>'.ts(7053)
【问题讨论】:
-
也许你想看看 Formik 新的 useFormik 钩子。更简洁的语法
-
您是否成功地映射了您的字段?您也有注释代码的问题,您映射了道具但您从未设置它们
-
如果你能在代码中重现这个问题,我会尽力帮助你
-
@Sabbin 你好,给你:codesandbox.io/s/green-fog-38yqe?file=/src/App.tsxTHANKSS
-
@Jnl 我在下面的答案中添加了解决方案和解释,请查看
标签: javascript reactjs typescript material-ui formik