Я использую набор Material UI для React. Я делаю флажки динамически из состояний и обновляю их,
Но я получаю ошибку неконтролируемого элемента.
this.state = {
services : [{service: "s1", value: false},
{service: "s2", value: false},
{service: "s3", value: false},
]
};
handleServiceCheck = (i) => {
let services = this.state.services;
services[i].value = !services[i].value;
this.setState({ services: services });
};
this.state.services.map((service, i) => (
<FormControlLabel key = {i}
control = {
<Checkbox
checked = {service.value}
onChange = {() => this.handleServiceCheck(i)}
value = {service.service}
className = {classes.checkBox}
/>
}
label = {service.service}
/>
))





Здесь есть несколько проблем.
Прежде всего, checked опоре Checkbox требуется логическое значение, но вы передаете целые числа.
Во-вторых, при изменении предыдущего состояния вы не должны изменять его на месте, вы должны передать функцию setState, которая принимает предыдущее состояние и возвращает новое.
handleServiceCheck = (i) => {
this.setState(prevState => ({services:
prevState.services.map((s, idx) => {
return i === idx
? { ...s, value: !s.value }
: s
})
}));
};
Вот Образец CodeSandbox, который я создал с полной исправленной рабочей версией.
Привет, это решило мою проблему. Большое спасибо.