Есть много способов сделать это, в моем решении я использовал Set
, что дает O(1)
сложность при настройке, добавлении и удалении переключаемых дней, а это именно то, что вам нужно:
import React, { Component } from "react";
import "./DayNames.css";
export default class DayNames extends Component {
constructor(props) {
super(props);
this.state = {
bgColor: "lightslategrey",
toggledDays: new Set()
};
}
createDayId = (columnIndex, rowIndex) => `${columnIndex}-${rowIndex}`;
handleClick = (columnIndex, rowIndex) => {
this.setState(prevState => {
const prevToggledDays = prevState.toggledDays;
const dayId = this.createDayId(columnIndex, rowIndex);
if (this.isDayToggled(columnIndex, rowIndex)) {
prevToggledDays.delete(dayId);
} else {
prevToggledDays.add(dayId);
}
return { toggledDays: prevToggledDays };
});
};
isDayToggled = (columnIndex, rowIndex) => {
const dayId = this.createDayId(columnIndex, rowIndex);
return this.state.toggledDays.has(dayId);
};
render() {
//Getting number of days of month
const month = new Date().getMonth() + 1;
const year = new Date().getFullYear();
const numberDaysOfMonth = new Date(year, month, 0).getDate();
let foo1 = [];
for (let i = 1; i <= numberDaysOfMonth; i++) {
foo1.push(i);
}
let foo2 = ["Ops1", "Ops2", "Ops3", "Ops4", "Ops5", "Ops6"];
const ops = foo2.map((elem, columnIndex) => {
return (
<div className="ops_header" key={columnIndex}>
{elem}
{foo1.map((cell, rowIndex) => {
return (
<div
className="operator"
data-id={cell}
key={rowIndex}
onClick={() => this.handleClick(columnIndex, rowIndex)}
>
{this.isDayToggled(columnIndex, rowIndex) ? "Holiday" : cell}
</div>
);
})}
</div>
);
});
return (
<div>
<div className="table">{ops}</div>
</div>
);
}
}
И все же иногда опасно ретранслировать индексы, но в вашем случае это кажется подходящим
Надеюсь, это поможет <3 </p>