#reactjs #react-hooks #autocomplete #material-ui
Вопрос:
У меня есть это автозаполнение :
var arr=[];
const changeHandler = (value) => {
// arr.push(value);
// console.log("arr",arr)
setItem(arr)
};
<Autocomplete
getOptionLabel={props.getOptionLabel}
options={options}
autoHighlight
onChange={changeHandler}
renderOption={(option) => (
<React.Fragment>
{option.persianCode} - {option.title}
</React.Fragment>
)}
label={props.label}
placeholder={props.placeholder}
inputLabelClassName={classes.instrumentLabel}
/>
И я хочу добавить любое выбранное значение в массив…Я нажимаю, но каждый раз, когда выбранное мной значение добавляется к нему.И предыдущее значение удаляется.Кто-нибудь знает, что мне следует делать?
Ответ №1:
Это выглядит так, как будто var arr=[];
находится в теле функции, поэтому оно повторно объявляется в каждом цикле рендеринга. Толчок в него всегда будет иметь только одно значение.
Если вы хотите обновить состояние, используйте обновленное функциональное состояние для добавления нового значения.
const changeHandler = (value) => {
setItem(items => [...items, value]);
};
Ответ №2:
Когда вы нажимаете на переменную состояния, которая является массивом, вы не изменяете фактический объект, и react не выполняет повторную визуализацию. Подробнее
Что вам нужно сделать, так это сделать глубокую копию и внести изменения в эту копию:
const changeHandler = value => setItem(arr => [...arr, value])