Более надежным способом обработки выбранных компонентов при использовании Formik было бы также использование компонента Jed Watsons Reaction-select .Они прекрасно работают вместе и абстрагируют многие шаблоны, которые вы обычно должны реализовать, чтобы компонент работал беспрепятственно с Formik.
Я привел простой пример из реакции-выбора / Джареда ПалмераFormik пример на коды и коробки и настроить его, чтобы отразить ваш код выше.
import "./formik-demo.css";
import React from "react";
import { render } from "react-dom";
import { withFormik } from "formik";
import Select from "react-select";
import "react-select/dist/react-select.css";
const options = [
{ value: "lokaler", label: "Lokaler" },
{ value: "jobb", label: "Jobb" },
{ value: "saker-ting", label: "Saker & ting" },
{ value: "evenemang", label: "Evenemang" }
];
const MyForm = props => {
const {
values,
handleChange,
handleBlur,
handleSubmit,
setFieldValue
} = props;
return (
<form onSubmit={handleSubmit}>
<label htmlFor="myText" style={{ display: "block" }}>
My Text Field
</label>
<input
id="myText"
placeholder="Enter some text"
value={values.myText}
onChange={handleChange}
onBlur={handleBlur}
/>
<MySelect value={values.option} onChange={setFieldValue} />
<button type="submit">Submit</button>
</form>
);
};
class MySelect extends React.Component {
handleChange = value => {
// this is going to call setFieldValue and manually update values.topcis
this.props.onChange("option", value);
};
render() {
return (
<div style={{ margin: "1rem 0" }}>
<label htmlFor="color">Select an Option </label>
<Select
id="color"
options={options}
onChange={this.handleChange}
value={this.props.value}
/>
</div>
);
}
}
const MyEnhancedForm = withFormik({
mapPropsToValues: props => ({
myText: "",
option: {}
}),
handleSubmit: (values, { setSubmitting }) => {
console.log(values);
}
})(MyForm);
const App = () => <MyEnhancedForm />;
render(<App />, document.getElementById("root"));
Есть несколько ошибок, вы должны включить css для выбора реакции, чтобы компонент отображался правильно
import "react-select/dist/react-select.css";
поле опции функции mapPropsToValues должно быть инициализировано вобъект
mapPropsToValues: props => ({
myText: "",
option: {}
Наконец, вот ссылка на пример кода и коробки
![Edit 31w93yvv45](https://codesandbox.io/static/img/play-codesandbox.svg)