Сохраняя фокус на контролируемом текстовом поле с помощью обновлений состояния, но также заставляя обновлять?

#reactjs #material-ui

Вопрос:

У меня есть управляемый компонент текстового поля Material-UI, который получает свое значение из состояния родительского компонента. Я не могу получить значение для обновления без потери фокуса текстового поля. Любая помощь будет признательна

 export function OtherApp() {

    const [stateArray, setStateArray] = useState([{name: 'first', value: 'val'}, {name: 'second', value: 'val'}])

    const changeHandler = (e, i) => {
        let state = stateArray;
        state[i].name = e.target.value;
        setStateArray(state);
        console.dir(state);
    }

    return (
        <div>
            {stateArray.map((el, i) => {
                return (
                    <TextField
                        fullWidth
                        id={`section-${i}-namet`}
                        key={`section-${i}-namet`}
                        value={stateArray[i].name}
                        helperText='Helper Text'
                        onChange={e => changeHandler(e, i)}
                    />
                )
            })}
        </div>
    )
}
 

Ответ №1:

Всегда рекомендуется клонировать состояние перед обновлением. Попробуйте добавить приведенный ниже код в функцию обработчика изменений

 const changeHandler = (e, i) => {
  let state = [...stateArray];
  ...
}