Я запросил дополнительную информацию об ошибке здесь: Должен ли я игнорировать предупреждение React: элементы ввода не должны переключаться с неуправляемых на управляемые? .Но я все еще застрял ..
Так что у меня есть случай, когда я хочу переключить поле ввода времени с хранения его собственного значения на получение значения из другого поля ввода времени.Я делаю это с помощью простой кнопки «заблокировано» / «разблокировано».Нажатие на эту кнопку позволяет мне выбрать, является ли поле ввода заблокированным (принимает значение у других) или разблокированным (сохраняет свое значение).Я делаю это внутри цикла, потому что каждое поле времени будет повторяться 7 раз (для каждого дня).
Проблема
Однако каждый раз, когда я переключаюсь с поля ввода обычного времени на времяполе ввода с действиями за ним, React дает мне следующую ошибку: Компонент изменяет неконтролируемый ввод типа времени для управления.Входные элементы не должны переключаться с неуправляемых на управляемые (или наоборот).Выберите между использованием контролируемого или неконтролируемого элемента ввода для времени жизни компонента
Объяснение кода ниже
Часть между комментариями выглядит следующим образом: Если заблокированное состояние поля ввода текущего дня 'true', то входные данные должны принимать значение из состояния ивыполнить обработчик onchange.Если оно ложно, оно не должно ничего делать и реагировать как основное поле ввода.
Что у меня есть
export class OpeningHoursTable extends Component{
constructor(props) {
super(props);
this.state = {
sharedInputMo : '',
empty: undefined
};
}
render() {
const Days = [{id: 1, day: 'Monday'},{id: 2, day: 'Tuesday'},{id: 3, day: 'Wednesday'},{id: 4, day: 'Thursday'},{id: 5, day: 'Friday'},{id: 6, day: 'Saturday'},{id: 7, day: 'Sunday'}];
const Table = Days.map(({id, day}) => (
<div key={id} className='ohTableRow'>
<div className='ohTableMorning'>
<div className='ohTableContentBlock'>{day}</div>
<div className='ohTableContentBlock'>
// THIS IS THE PART THAT GIVES ME THE ERROR
<input type='time'
value={this.state['lock' + day + '_mo'] === true ? this.state.sharedInputMo || this.state.empty: this.state.empty}
onChange={this.state['lock' + day + '_mo'] === true ? thisInput => this.setState({sharedInputMo : thisInput.target.value }) : null }
/>
// THIS IS THE PART THAT GIVES ME THE ERROR
</div>
<div className='ohTableLockState' onClick={this.state['lock' + day + '_mo'] === true ? () => this.setState({ ['lock' + day + '_mo'] : false }) : () => this.setState({ ['lock' + day + '_mo'] : true }) }>
{this.state['lock' + day + '_mo'] === true ?
<Icon name='Locked' />
:
<Icon name='Unlocked' />
}
</div>
</div>
</div>
));
return (
<div className='ohTable'>
{Table}
</div>
);
}
}