최근에 좌석배치도를 만드는 일이 있었다. 여기서 생긴 문제점은 층수까지 나뉜 좌석배치도인게 문제였다.
층들의 형태
[{
floor:0,
row:5,
col:4
}]
좌석들의 형태
[{
col:0,
row:0,
floor:0,
selected:true,
id:0,
}]
[[1층의 좌석], [2층의 좌석], [3층의 좌석]]
그리고 state를 변경할 때, 현재 보고있는 층수를 배열의 idx값으로 사용하여 해결,,!
setSeat((curSeat) => {
const copyCurSeat = [...curSeat]; // [[1층], [2층], [3층]]
copyCurSeat[curFloor] = copyCurSeat[curFloor].map((seat) => ({
...seat,
selected: seat.id === id ? true : false,
}));
return copyCurSeat;
});
여기서 당연한 전제조건은 층을 기반으로 좌석을 만든다는 것이었다. 그렇게 하지 않으면, 층이 없는데 좌석만 있을 수 있기 때문에
층의 length와 좌석의 length는 항상 같게끔 했다.