Для материала вы можете использовать эту замечательную библиотеку https://github.com/stackworx/formik-material-ui
Вот их примеры кодов и коробка https://codesandbox.io/s/915qlr56rp?file= / src / index.tsx
Если вы не хотите использовать их библиотеку, вы можете использовать опору компонента Formik, чтобы использовать свой пользовательский компонент
На основании вашего запроса на комментирование я написал здесь код в codeandbox https://codesandbox.io/s/react-formik-material-ui-select-huzv7?file= / src / App. js
Я не уверен, почему у вас есть переменные состояния для значений formik. Они обрабатываются formik. Нам не нужно обрабатывать их вручную.
import React from "react";
import { Formik, Form, Field } from "formik";
import {
Select,
InputLabel,
MenuItem,
FormControl,
Button
} from "@material-ui/core";
import "./styles.css";
const CustomizedSelectForFormik = ({ children, form, field }) => {
const { name, value } = field;
const { setFieldValue } = form;
return (
<Select
name={name}
value={value}
onChange={e => {
setFieldValue(name, e.target.value);
}}
>
{children}
</Select>
);
};
export default function App() {
/*
You don't need to handle the formik values as state.
Formik handles it itself
const [hours, setHours] = React.useState("");
const handleHourChange = ({ target }) => {
setHours(target.value);
};
*/
return (
<Formik
initialValues={{
price: "abcv", //not Material UI. Works.
hours: 60 //from Material UI
}}
onSubmit={(values, actions) => {
alert("values:" + JSON.stringify(values));
}}
>
<Form>
<label htmlFor={"price"}> Price </label>
<Field
name={"price"}
type="text" //this Field (not Material UI) works fine.
/>
<FormControl>
<InputLabel id="demo-simple-select-label">Hours</InputLabel>
<Field name="hours" component={CustomizedSelectForFormik}>
<MenuItem value={60}>01</MenuItem>
<MenuItem value={120}>02</MenuItem>
</Field>
</FormControl>
<Button type="submit">Submit</Button>
</Form>
</Formik>
);
}