Toggle Single
Обновление handleToggle
для получения переданного ему индекса и сохранения его в состоянии вместо логического значения.
App.js
this.state={
...,
selected: null,
}
handleToggle (selected) {
console.log("toggled index", selected);
console.log("selected state", this.state.selected);
this.setState({ selected });
}
Обновление сопоставленных элементов для сравнения выбранного индекса с текущим индексом отображаемого элемента.
Results.js
props.items.map((item, i) => {
const isSelected = selected === i;
return (
<li
key={i}
onClick={() => handleToggle(i)}
class="list-group-item"
style={{
textDecorationLine: isSelected ? "line-through" : "none",
textDecorationStyle: isSelected ? "solid" : "none",
border: isSelected ? "2px solid green" : "1px solid black"
}}
>
{item}
<Button onClick={() => onDelete(i)} style={btnStyle} variant="danger">
Delete
</Button>
</li>
);
});
Переключить несколько
Обновите handleToggle
, чтобы взять переданный ему индекс и сохранить его в состоянии вместо логического значения. Измените состояние selected
на объект индексов в качестве ключей и выберите значение true / false в качестве значения.
App.js
this.state={
...,
selected: {},
}
handleToggle (index) {
console.log("toggled index", index);
console.log("selected state", this.state.selected);
this.setState(prevState => {
// copy state and update index
const selected = {...prevState.selected};
selected[index] = !selected[index];
return { selected };
});
}
Обновите сопоставленные элементы, чтобы извлечь выбранное значение из текущий индекс i
отображаемого элемента.
Results.js
props.items.map((item, i) => {
const isSelected = selected[i];
return (
<li
key={i}
onClick={() => handleToggle(i)}
className="list-group-item"
style={{
textDecorationLine: isSelected ? "line-through" : "none",
textDecorationStyle: isSelected ? "solid" : "none",
border: isSelected ? "2px solid green" : "1px solid black"
}}
>
{item}
<Button onClick={() => onDelete(i)} style={btnStyle} variant="danger">
Delete
</Button>
</li>
);
});