Reactjs 使用材质UI在嵌套表单中传递Formik输入值
我目前在将Formik与MaterialUI表单一起使用时遇到问题。明确地 使用Material UI在嵌套表单中传递Formik输入值时遇到问题,并且出现了一个小问题,Reactjs 使用材质UI在嵌套表单中传递Formik输入值,reactjs,formik,formik-material-ui,Reactjs,Formik,Formik Material Ui,我目前在将Formik与MaterialUI表单一起使用时遇到问题。明确地 使用Material UI在嵌套表单中传递Formik输入值时遇到问题,并且出现了一个小问题,Formik.handleChange正在将值从数字更改为字符串 我有多个表单,它们在MaterialUI中用Stepper组件拆分。因为我还在学习,所以我尝试在其中一个步骤上包装Formik(稍后我将包装整个步进机)。下面是它的外观: {activeStep === 0 && (
Formik.handleChange
正在将值从数字更改为字符串
我有多个表单,它们在MaterialUI中用Stepper组件拆分。因为我还在学习,所以我尝试在其中一个步骤上包装Formik(稍后我将包装整个步进机)。下面是它的外观:
{activeStep === 0 && (
<Formik
initialValues={initialValues}
validationSchema={validationSchema}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
setSubmitting(false);
}, 400);
}}
>
{formik => (
<form onSubmit={formik.handleSubmit}>
<div className="col-xl-6">
<Portlet fluidHeight>
<PortletHeader title="Incident Type" />
<PortletBody>
<IncidentSelect formik={formik} />
</PortletBody>
</Portlet>
</div>
</form>
)}
</Formik>
)}
如中所述,抽象要使用的组件更容易。使您有机会在以后的应用程序中重用它们,并使代码更具可读性
Formik为您提供了useFields
API,通过钩子获得该领域的道具useFields
正在查找组件的名称
道具,以找到相应的字段
因此,可以按如下方式从MaterialUI中提取RadioGroup
:
export const IncidentRadioButton = ({ options, ...props }) => {
const [field, meta] = useField(props);
return (
<>
<RadioGroup {...field} {...props}>
{options.map((option, index) => (
<FormControlLabel
control={<Radio />}
label={option.name}
value={option.value}
key={index}
/>
))}
</RadioGroup>
{meta.touched && meta.error ? (
<div className="error">{meta.error}</div>
) : null}
</>
);
};
export const IncidentRadioButton=({options,…props})=>{
const[field,meta]=useField(props);
返回(
{options.map((选项,索引)=>(
))}
{meta.moucted&&meta.error(
{meta.error}
):null}
);
};
然后您可以使用选项
道具相应地放置数据
export const IncidentRadioButton = ({ options, ...props }) => {
const [field, meta] = useField(props);
return (
<>
<RadioGroup {...field} {...props}>
{options.map((option, index) => (
<FormControlLabel
control={<Radio />}
label={option.name}
value={option.value}
key={index}
/>
))}
</RadioGroup>
{meta.touched && meta.error ? (
<div className="error">{meta.error}</div>
) : null}
</>
);
};