[英]Get the "ID" of the selected value with material-ui autocomplete
我將自動完成組件與 material-ui 一起使用。
搜索欄“customerList”中的數據沒有問題。 但我無法獲得我選擇的數據的“ID”號。 我想獲取所選數據的 ID 號。
此外,還會出現如下錯誤。 我怎樣才能解決這個問題?
import Autocomplete from '@material-ui/lab/Autocomplete';
class AppointmentFormContainerBasic extends React.PureComponent {
constructor(props) {
super(props);
}
render() {
const textEditorProps = (field) => ({
variant: 'outlined',
onChange: ({ target: change }) => this.changeAppointment({
field: [field], changes: change.value
}),
value: displayAppointmentData[field] || '',
className: classes.textField
});
const customerList = [
{id: "1", customerName: 'John', customerSurname: "test0"},
{id: "2", customerName: 'Bob', customerSurname: "test1"},
{id: "3", customerNametle: 'steve', customerSurname: "test2"},
{id: "4", customerName: 'steve', customerSurname: "test3"},
{id: "4", customerName: 'natalia', customerSurname: "test4"}
];
return (
<AppointmentForm.Overlay
visible={visible}
target={target}
fullSize
onHide={onHide}>
<div>
<div className={classes.content}>
<div className={classes.wrapper}>
<Create className={classes.icon} color="action" />
<Autocomplete
id="free-solo-demo"
freeSolo
options={customerList.map( (option) => {
if (top100Films.customerName === undefined) {
console.log("undefined")
} else {
console.log("option.customerName")
}
return option.customerName + " " + option.customerSurname;
})}
defaultValue={displayAppointmentData['customerName']}
onInputChange={(event, newInputValue) => {
this.changeAppointment({
field: ['customerName'], changes: newInputValue,
value: displayAppointmentData[newInputValue] || '',
});
}}
/>
</div>
</div>
</AppointmentForm.Overlay>
);
}
}
編輯從以下示例中可以看出,onChange 方法的 newValue 參數返回 object。
import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
export default function ComboBox() {
return (
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
onChange={(event, newValue) => {
console.log(JSON.stringify(newValue, null, ' '));
}}
/>
);
}
const top100Films = [
{ id: 0, title: "The Shawshank Redemption", year: 1994 },
{ id: 1, title: "The Godfather", year: 1972 },
{ id: 2, title: "The Godfather: Part II", year: 1974 },
{ id: 3, title: "The Dark Knight", year: 2008 },
{ id: 4, title: "12 Angry Men", year: 1957 }
];
在使用freeSolo
和Autocomplete
從對象中進行選擇時,我遇到了同樣的問題。 onChange
和onInputChange
都不從options
返回 object,只返回 label。 沒有freeSolo
就可以了。
我求助於通過我的選項來找到匹配的選項。 然后我使用 SourceSelect 將其返回給組件。 它不漂亮,但它有效。 這是我的代碼,它是 TypeScript,但“解決方案”也適用於 JavaScript。
import React, {ChangeEvent} from "react";
import {Autocomplete} from "@material-ui/lab";
import {TextField} from "@material-ui/core";
type SourceSelectParams =
{
updateSource:(source:Source)=> void
sourceOptions:Source[]
preSelected:Source
}
export default function SourceSelect(props:SourceSelectParams){
function optionForLabel(label:string):Source{
let toReturn = props.sourceOptions.find(
(source:Source)=>{ return source.name === label}
)
if(toReturn){
return toReturn
}
return {name:label}
}
function update(event:ChangeEvent<{}>, value:Source|string|null) {
if(value === null){
return
}else if( typeof value === 'string'){
props.updateSource(optionForLabel(value))
}else{
props.updateSource( value)
}
}
return(<Autocomplete options={props.sourceOptions}
value={props.preSelected}
getOptionLabel={(option) => option.name}
onInputChange={update}
onChange={update}
renderInput={
(params) => <TextField {...params}
label="Source"
variant="outlined"
/>}
freeSolo
autoSelect
id={'source'}/>)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.