Основываясь на коде пошагового кода Material-UI, я бы хотел реализовать выбор, у которого есть опции, зависящие от выбранного значения в другом выборе (в том же компоненте реакции). Я сделал функцию переключения:
function getGradeContent(grade: number) {
switch (grade) {
case 0:
return <MenuItem value={0}>Infantil</MenuItem>;
case 1:
return (
<div>
<MenuItem value={1}>1º Ano</MenuItem>
<MenuItem value={2}>2º Ano</MenuItem>
<MenuItem value={3}>3º Ano</MenuItem>
<MenuItem value={4}>4º Ano</MenuItem>
<MenuItem value={5}>5º Ano</MenuItem>
</div>
);
case 2:
return (
<div>
<MenuItem value={6}>6º Ano</MenuItem>
<MenuItem value={7}>7º Ano</MenuItem>
<MenuItem value={8}>8º Ano</MenuItem>
<MenuItem value={9}>9º Ano</MenuItem>
</div>
);
case 3:
return (
<div>
<MenuItem value={10}>1º Ano Médio</MenuItem>
<MenuItem value={11}>2º Ano Médio</MenuItem>
<MenuItem value={12}>3º Ano Médio</MenuItem>
</div>
);
case 4:
return <MenuItem value={13}>Técnico</MenuItem>;
case 5:
return <MenuItem value={14}>Graduação</MenuItem>;
case 6:
return <MenuItem value={14}>Pós-Graduação</MenuItem>;
default:
return "Unknown step";
}
}
Затем я создал выбор материала UI внутри Formik:
export default function ScholarshipForm() {
const classes = useStyles();
return (
<Formik
initialValues={{
actual_school : false,
school_name : "",
date_begin : new Date(),
date_end : "",
level : 0,
grade : 0,
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
JSON.stringify(values, null, 2);
console.log(values)
setSubmitting(false);
}, 400);
}}
validationSchema={validationSchema}
>
{({ values,
errors,
touched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting, }) => (
<Form className={classes.root} onSubmit={handleSubmit}>
<FormControl id="level" variant="outlined" className=
{classes.formControl}>
<InputLabel id="level">Nivel Escolar</InputLabel>
<Select
labelId="level"
id="level"
name="level"
label="Nível Escolar"
onBlur={handleBlur}
value={values.level}
onChange={handleChange}
aria-describedby="Nivel Escolar"
>
<MenuItem value={0}>Infantil</MenuItem>
<MenuItem value={1}>Fundamental 1</MenuItem>
<MenuItem value={2}>Fundamental 2</MenuItem>
<MenuItem value={3}>Médio</MenuItem>
<MenuItem value={4}>Técnico</MenuItem>
<MenuItem value={5}>Graduação</MenuItem>
<MenuItem value={6}>Pós-Graduação</MenuItem>
</Select>
<FormHelperText>{(errors.level && touched.level) && errors.level}</FormHelperText>
</FormControl>
Этот выбор должен передать values.level
другому выбору, чтобы быть Применительно к этой функции и отобразить опции пункта меню в этом выборе, вот моя неудачная попытка.
<FormControl id="grade" variant="outlined" className={classes.formControl}>
<InputLabel id="grade">Ano Escolar</InputLabel>
<Select
labelId="grade"
id="grade"
name="grade"
label="Ano Escolar"
onBlur={handleBlur}
value={values.grade}
onChange={handleChange}
aria-describedby="Ano Escolar"
>
{const index = {values.level}; //"Parsing error: Expression expected"
getGradeContent.map((grade:number, index:number) => {
return(
{grade}
);
})}
</Select>
<FormHelperText>{(errors.level && touched.level) && errors.level}</FormHelperText>
</FormControl>
Есть ли практический способ решить эту проблему?