#javascript #reactjs #material-ui
#javascript #reactjs #material-ui
Вопрос:
У меня вызван компонент form.js
. Компонент имеет два состояния: состояние обновления и состояние создания. Там у меня есть AutoComplete
компонент. Он отлично работает с состоянием создания. (Создание данных работает нормально)
Но когда я пытаюсь использовать тот же компонент, что и компонент обновления. customerId
правильно установлено для состояния компонента. Но не показывает имя соответствующего клиента в AutoComplete
поле.
const agents = [
{ name: "Pathum", id: 1 },
{ name: "Chamod", id: 2 },
{ name: "Avishka", id: 3 }
];
<FormControl style={{width:'100%'}}>
<Autocomplete
id="combo-box-demo"
options={agents}
getOptionLabel={(option) => option.name}
style={{ width: '100%' }}
onChange={(e, v) => {
if (v) {
setFieldValue("customerId", v.id);
} else {
setFieldValue("customerId", "");
}
}}
renderInput={(params) => {
return (
<TextF
{...params}
label="Combo box"
variant="outlined"
/>
);
}}
/>
</FormControl>
Я передаю этот массив агентов компоненту автозаполнения. Выбран идентификатор пользователя 3. Поэтому в идеале я хочу видеть имя Avishka в компоненте автозаполнения, вместо этого оно пустое.
Надеюсь, мой вопрос понятен всем. Это полный код https://codesandbox.io/s/material-demo-forked-z8kjq?file=/demo.js:1842-1949
Комментарии:
1. Ваш пример кода также должен включать ваше автозаполнение, которого в настоящее время нет. Вот где возникает проблема, поэтому, если вы хотите, чтобы мы помогли, нам нужно увидеть эту часть кода.
Ответ №1:
Поскольку ваш Autocomplete
не контролируется и используется в основном для ваших форм, просто назначьте defaultValue
<Autocomplete
defaultValue={agents[2]}
/>
В качестве альтернативы вы можете переключиться на управляемый компонент. Значение будет основано на Formik values
<Autocomplete
value={agents.find((agent) => agent.id === values.customerId)}
/>
Комментарии:
1. Привет, этот второй вариант отлично работает в изолированной среде кода. Но когда я применяю это к реальному проекту, это не работает. В реальном проекте массив агентов устанавливается из вызова API. В этом причина?
2. вероятно, в этом случае данные агентов недоступны, поэтому
Autocomplete
необходимо выполнить повторный рендеринг в соответствии с новыми данными, полученными из API (например, перевестиagents
в состояние)