Я новичок в реагировании, и у меня были проблемы с созданием флажков для моего приложения. Мне удалось настроить что-то, что работает только для одного флажка, однако проблема, с которой я столкнулся сейчас, связана с несколькими вариантами флажка.
Всякий раз, когда я нажимаю на один флажок, он автоматически устанавливает все остальные флажки.
Вот код, над которым я сейчас работаю.
import React, { Component, } from 'react';
export default class Checkbox extends Component {
constructor(props) {
super();
let initialState = {
options: [{ id: 1, answer: 'Apple' }, { id: 2, answer: 'Bananas' }, { id: 3, answer: 'Oranges' }],
isChecked: false,
};
this.state = initialState;
}
handleCheckbox() {
this.setState({
isChecked: !this.state.isChecked
})
}
render() {
return (
<div>
{
[...this.state.options].map((e, i) => {
return (
<label key = {e.id}>
<input type = "checkbox"
disabled = {this.props.disabled}
onChange = {() => this.handleCheckbox()}
checked = {this.state.isChecked}
key = {e.id}
/>
{e.answer}
</label>
)
})
}
</div>
)
}
}
проверьте этот ответ, это подробный ответ, и он содержит все, что вам нужно stackoverflow.com/questions/31073281/…
Вы должны изменить свой код, как показано ниже:
import React, { Component, } from 'react';
export default class Checkbox extends Component {
constructor(props) {
super();
let initialState = {
options: [{ id: 1, answer: 'Apple', isChecked: false }, { id: 2, answer: 'Bananas', isChecked: false }, { id: 3, answer: 'Oranges', isChecked: false }],
};
this.state = initialState;
}
handleCheckbox(id) {
const modifiedOptions = [...this.state.options];
modifiedOptions[id].isChecked = !modifiedOptions[id].isChecked;
this.setState({
options: modifiedOptions
})
}
render() {
return (
<div>
{
[...this.state.options].map((e, i) => {
return (
<label key = {e.id}>
<input type = "checkbox"
disabled = {this.props.disabled}
onChange = {() => this.handleCheckbox(e.id)}
checked = {e.isChecked}
key = {e.id}
/>
{e.answer}
</label>
)
})
}
</div>
)
}
}
Идентификатор handleCheckbox(id) будет undefined
id
не всегда равно, как индекс
В этом случае он будет равен, так как мы создаем объект с разными идентификаторами.
То же решение, что и у Вадима. Спасибо!
Я добавил этот первый @GJosh... В любом случае, ваша проблема решена, это важно...
Вам нужно переместить isChecked
внутри вариантов:
import React, { Component, } from 'react';
export default class Checkbox extends Component {
constructor(props) {
super();
let initialState = {
options: [{ id: 1, answer: 'Apple', isChecked:false }, { id: 2, answer: 'Bananas', isChecked:false }, { id: 3, answer: 'Oranges', isChecked:false }],
};
this.state = initialState;
}
handleCheckbox(ind) {
const newOptions = [...this.state.options];
newOptions[ind].isChecked = !newOptions[ind].isChecked;
this.setState({
options: newOptions
})
}
render() {
return (
<div>
{
[...this.state.options].map((e, i) => {
return (
<label key = {e.id}>
<input type = "checkbox"
disabled = {this.props.disabled}
onChange = {() => this.handleCheckbox(i)}
checked = {e.isChecked}
key = {e.id}
/>
{e.answer}
</label>
)
})
}
</div>
)
}
}
Да, потому что вы задекларировали только один
isCheck
, поэтому он будет проверять все