【发布时间】:2020-06-09 01:01:00
【问题描述】:
在我的表单中,我使用 Formik/Yup 进行验证。目前,这在我的表单中完美运行:
export default function AddUserPage() {
const [firstName, setFirstName] = useState("");
const [email, setEmail] = useState("");
return (
<div>
<Formik
initialValues={{ firstName: "", email: "" }}
onSubmit={(values, actions) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
actions.setSubmitting(false);
}, 1000);
}}
validationSchema={schema}
>
{props => {
const {
values: { firstName, lastName, email, password, phone },
errors,
touched,
handleChange,
isValid,
setFieldTouched
} = props;
const change = (name: string, e: any) => {
e.persist();
handleChange(e);
setFieldTouched(name, true, false);
};
return (
<div className="main-content">
<form style={{ width: "100%" }}>
<div>
<TextField
variant="outlined"
margin="normal"
id="firstName"
name="firstName"
helperText={touched.firstName ? errors.firstName : ""}
error={touched.firstName && Boolean(errors.firstName)}
label="First Name"
//onChange={e => setFirstName(e.target.value)}
value={firstName}
onChange={change.bind(null, "firstName")}
/>
<br></br>
<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")}
/>
<br></br>
</div>
</form>
</div>
);
}}
</Formik>
</div>
);
}
但是,我不想输入所有内容,而是想映射我的文本字段。我如何映射我的文本字段?
我尝试过这样的事情,但我得到了 helperText 和错误属性的错误:
{[{ label: "First Name", state: firstName , type: "text", function: setFirstName},
{ label: "Email", state: email , type: "text", function: setEmail},
]}.map((item, index) => (
<div>
<TextField
id="outlined-basic"
key={index}
label={item.label}
variant="outlined"
type= {item.type}
helperText= {touched[item.state] ? errors[item.state] : ""}
onChange={change.bind(null, state)}
/>
<br></br><br></br>
</div>
)
在这里,我在帮助文本上收到一个错误:
元素隐式具有“any”类型,因为“any”类型的表达式不能用于索引类型“FormikTouched'
我也尝试添加这个,但这也给了我一个错误:
helperText = {touched.item.state}
【问题讨论】:
-
touched.{item.state}这不是有效的 JS。 -
我可以使用什么替代方案?对此有点新意。 @evolutionxbox
-
也许使用括号表示法?
touched[item.state] -
不,没用
-
“没用”是什么意思?有错误吗?
标签: javascript reactjs typescript mapping material-ui