작성
·
115
·
수정됨
0
const onRightClickTd = useCallback(
(e) => {
e.preventDefault();
if (halted) {
return;
}
console.log(`Right click on cell [${rowIndex}, ${cellIndex}]`);
switch (tableData[rowIndex][cellIndex]) {
case CODE.NORMAL:
case CODE.MINE:
dispatch({ type: FLAG_CELL, row: rowIndex, cell: cellIndex });
return;
case CODE.FLAG_MINE:
case CODE.FLAG:
dispatch({ type: QUESTION_CELL, row: rowIndex, cell: cellIndex });
return;
case CODE.QUESTION_MINE:
case CODE.QUESTION:
dispatch({ type: NORMALIZE_CELL, row: rowIndex, cell: cellIndex });
return;
default:
return;
}
},
[tableData[rowIndex][cellIndex], halted]
);
return (
<td
style={getTdStyle(tableData[rowIndex][cellIndex])}
onClick={onClickTd}
onContextMenu={onRightClickTd}
>
{getTdText(tableData[rowIndex][cellIndex])}
</td>
);
};
export const TableContext = createContext({
tableData: [],
halted: true,
dispatch: () => {},
});
const initialState = {
tableData: [],
timer: 0,
result: "",
halted: true,
};
강의에서 나온대로 적용하여 수업을 듣고 있는데, onRightClickTd가 작동을 하지 않습니다.
콘솔에는 누를때마다 찍히는데, 오른쪽 마우스 이벤트 자체를 인식을 못하는 것 같습니다.
혹시몰라 Td.jsx 컴포넌트 코드를 다 올립니다! 어떤 문제 때문에 작동을 안하는걸까요?
import React, { useCallback, useContext } from "react";
import {
CLICK_MINE,
CODE,
FLAG_CELL,
NORMALIZE_CELL,
OPEN_CELL,
QUESTION_CELL,
TableContext,
} from "./MineSearch";
const getTdStyle = (code) => {
switch (code) {
case CODE.NORMAL:
case CODE.MINE:
return {
background: "#444",
};
case CODE.CLICKED_MINE:
case CODE.OPENED:
return {
background: "white",
};
case CODE.QUESTION_MINE:
case CODE.QUESTION:
return {
background: "yellow",
};
case CODE.FLAG_MINE:
case CODE.FLAG:
return {
background: "red",
};
default:
return {
background: "white",
};
}
};
const getTdText = (code) => {
switch (code) {
case CODE.NORMAL:
return "";
case CODE.MINE:
return "X";
case CODE.CLICKED_MINE:
return "꽝";
case CODE.FLAG_MINE:
case CODE.FLAG:
return "!";
case CODE.QUESTION_MINE:
case CODE.QUESTION:
return "?";
default:
return "";
}
};
const Td = ({ rowIndex, cellIndex }) => {
const { tableData, dispatch, halted } = useContext(TableContext);
const onClickTd = useCallback(() => {
if (halted) {
return;
}
console.log(`Right click on cell [${rowIndex}, ${cellIndex}]`);
switch (tableData[rowIndex][cellIndex]) {
case CODE.OPENED:
case CODE.FLAG_MINE:
case CODE.FLAG:
case CODE.QUESTION_MINE:
case CODE.QUESTION:
return;
case CODE.NORMAL:
dispatch({ type: OPEN_CELL, row: rowIndex, cell: cellIndex });
return;
case CODE.MINE:
dispatch({ type: CLICK_MINE, row: rowIndex, cell: cellIndex });
return;
}
}, [tableData[rowIndex][cellIndex], halted]);
const onRightClickTd = useCallback(
(e) => {
e.preventDefault();
if (halted) {
return;
}
console.log(`Right click on cell [${rowIndex}, ${cellIndex}]`);
switch (tableData[rowIndex][cellIndex]) {
case CODE.NORMAL:
case CODE.MINE:
dispatch({ type: FLAG_CELL, row: rowIndex, cell: cellIndex });
return;
case CODE.FLAG_MINE:
case CODE.FLAG:
dispatch({ type: QUESTION_CELL, row: rowIndex, cell: cellIndex });
return;
case CODE.QUESTION_MINE:
case CODE.QUESTION:
dispatch({ type: NORMALIZE_CELL, row: rowIndex, cell: cellIndex });
return;
default:
return;
}
},
[tableData[rowIndex][cellIndex], halted]
);
return (
<td
style={getTdStyle(tableData[rowIndex][cellIndex])}
onClick={onClickTd}
onContextMenu={onRightClickTd}
>
{getTdText(tableData[rowIndex][cellIndex])}
</td>
);
};
export default Td;
아, 컴퓨터를 끄고 잠시 일보고 와서 다시 켰더니 잘 작동하네요! 이게 개발자도구를 켜놓고 하니 작동이 안돼는거였네요!
근데, edge에서는 또 작동을 하네요! 이런 경우에는 webpack.config.js를 살펴보면 괜찮나요?