当前正在尝试将Material UI的自动完成组件与Formik一起使用。到目前为止,Formik可以很好地处理文本字段和Material-UI中的传统选择。并非如此。Formik的onChange处理函数似乎并未更新my的值city_id
。我知道Autocomplete仍然不是Material-UI的核心库的一部分,但是目前仍在查看是否有可能出现这种情况。
import React from "react";
import ReactDOM from "react-dom";
import { Formik, Form } from 'formik';
import TextField from '@material-ui/core/TextField';
import Autocomplete from '@material-ui/lab/Autocomplete';
import Button from '@material-ui/core/Button';
import { cities } from '../data/cities';
import "./styles.css";
const initialValues = {
city_id: '',
};
const submit = params => {
alert(`Value for city_id is: ${params.city_id}`);
};
function App() {
return (
<Formik
initialValues={ initialValues }
onSubmit={ submit }
>
{({
handleChange,
values,
}) => (
<Form>
<Autocomplete
id="city_id"
name="city_id"
options={ cities }
groupBy={ option => option.state }
getOptionLabel={ option => option.name }
style={{ width: 300 }}
renderInput={params => (
<TextField
{ ...params }
onChange={ handleChange }
margin="normal"
label="Cities"
fullWidth
value={ values.city_id }
/>
)}
/>
<Button
variant="contained"
color="primary"
type="submit"
>
Submit
</Button>
</Form>
)}
</Formik>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
您的问题是,handleChange
这种方式无法正常工作。
如果您查看handleChange文档:
通用输入更改事件处理程序。这将更新values [key],其中key是发出事件的输入的name属性。如果name属性不存在,handleChange将查找输入的id属性。注意:“输入”在这里表示所有HTML输入。
这应该工作正常,但问题是,TextField
里面Autocomplete
只会触发handleChange
当你输入了东西,和值将是文本,而不是id
你想要或其他财产,所以你需要移动handleChange
到Autocomplete
。
还有另一个问题,您不能handleChange
在中使用,Autocomplete
因为它没有引用您想要的输入,并且它的参数也不同于正常onChange
的input
,如您在docs中看到的那样。
onChange
func
值更改时触发回调。
签名::
function(event: object, value: any) => void
event
回调的事件源
value
:null
因此,您需要做的就是使用setFieldValue
并将其传递给Autocomplete
喜欢
onChange={(e, value) => setFieldValue("city_id", value)}
您需要传递字段名称以及想要获得的值。
这是一个有效的例子
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句