как добавить любое выбранное значение в массив?

#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])