Вы гарантируете, что свойство value никогда не было неопределенным, но вы должны были сделать то же самое для inputValue .
- состояние «значение» с комбинация свойств value / onChange. Это состояние представляет значение, выбранное пользователем, например, при нажатии Enter.
- состояние «входное значение» с комбинацией свойств inputValue / onInputChange. Это состояние представляет значение, отображаемое в текстовом поле.
⚠️ Эти два состояния изолированы, они должны управляться независимо.
Компонент становится неуправляемым, когда свойство inputValue не определено, и наоборот.
Если в следующем примере вы удалите пустую строку из React.useState('')
, вы получите такое же сообщение об ошибке, потому что inputValue во время первый рендер - undefined
.
import React from 'react'
import TextField from '@material-ui/core/TextField'
import Autocomplete from '@material-ui/lab/Autocomplete'
const options = ['Option 1', 'Option 2']
export default function AutocompleteLab() {
const [value, setValue] = React.useState(options[0])
const [inputValue, setInputValue] = React.useState('')
return (
<div>
<div>{`value: ${value !== null ? `'${value}'` : 'null'}`}</div>
<div>{`inputValue: '${inputValue}'`}</div>
<br />
<Autocomplete
value={value}
onChange={(_, newValue) => {
setValue(newValue)
}}
inputValue={inputValue}
onInputChange={(_, newInputValue) => {
setInputValue(newInputValue)
}}
options={options}
style={{ width: 300 }}
renderInput={(params) => <TextField {...params} label="Name" variant="outlined" />}
/>
</div>
)
}