인프런 커뮤니티 질문&답변
안녕하세요 코드 질문이요
작성
·
192
0
tictacto 컴포넌트
const reducer = (state, action) => {
switch (action.type) {
case CLICK_CELL: {
const tableData = [...state.tableData];
tableData[action.rowIndex] = [...tableData[action.rowIndex]];
tableData[action.rowIndex][action.cellIndex] = state.turn;
return {
...state,
tableData,
};
}
case CHANGE_TURN: {
return {
...state,
turn: state.turn === "O" ? "X" : "O",
};
}
case CHECK_WINNER: {
const { tableData, turn } = state;
if (
tableData[action.row][0] === turn &&
tableData[action.row][1] === turn &&
tableData[action.row][2] === turn
) {
return { ...state, winner: turn };
}
if (
tableData[0][action.cell] === turn &&
tableData[1][action.cell] === turn &&
tableData[2][action.cell] === turn
) {
return { ...state, winner: turn };
}
if (
tableData[0][0] === turn &&
tableData[1][1] === turn &&
tableData[2][0] === turn
) {
return { ...state, winner: turn };
}
if (
tableData[0][2] === turn &&
tableData[1][1] === turn &&
tableData[2][0] === turn
) {
return { ...state, winner: turn };
}
}
}
};
td 컴포넌트 에서는
dispatch({ type: CHECK_WINNER, row: rowIndex, cell: cellIndex });
이런식으로 주고 승자 판단을 해봤는데요. 이렇게 해도 크게 문제가
없는건가요?
퀴즈
useReducer에서 상태(state)를 업데이트할 때 가장 중요하게 지켜야 할 원칙은 무엇인가요?
기존 상태 객체를 직접 수정해야 합니다.
항상 새로운 상태 객체나 배열을 반환해야 합니다.
이전 상태와 새로운 상태를 콘솔에 기록해야 합니다.
상태 업데이트는 반드시 동기적으로 이루어져야 합니다.




