Conversation
| export const BoardContext = React.createContext<BoardContextType | null>(null); | ||
|
|
||
| export default function Board() { | ||
| const { changeGameStatus, trackingArray, changeTrackArr, board } = useContext( |
There was a problem hiding this comment.
context не стоит использовать в приложении так широко, для этих целей гораздо лучше подходит redux и react-redux, хотя react-redux и использует под капотом context, но это более распространённый вариант.
Ну или можно было обойтись только пропсами
| ); | ||
| } | ||
|
|
||
| // useEffect -> didMount, didUpdate, willUnmount |
| ) as GlobalState; | ||
|
|
||
| const boardArray: number[][] = | ||
| JSON.parse(sessionStorage.getItem('boardArray') as string) || board.arr; |
There was a problem hiding this comment.
Не совсем понятно, зачем здесь использовать sessionStorage
| useEffect(() => { | ||
| sessionStorage.setItem('boardArray', JSON.stringify(boardArray)); | ||
| sessionStorage.setItem('minesPositions', JSON.stringify(minesPositions)); | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps |
There was a problem hiding this comment.
Стоит избегать отключения eslint для определенных строк - надо или разобраться, в чем ошибка, или отключить правило глобально если оно не подходит для твоего code-style
| trackingArray[x][y] = flag ? 0 : -1; | ||
| if (trackingArray[x][y] === 0) setRemainingMines(remainingMines + 1); | ||
| else if (trackingArray[x][y] === -1) setRemainingMines(remainingMines - 1); | ||
| sessionStorage.setItem('trackingArray', JSON.stringify(trackingArray)); |
There was a problem hiding this comment.
Не могу понять смысл использования sessionStorage - если оно используется для хранения данных приложения - то для этих целей более подходит redux или state основного компонента. Если данные необходимо сохранить для следующей сессии - то лучше использовать localStorage.
| children: JSX.Element[]; | ||
| } | ||
|
|
||
| export default function GlobalProvider({ children }: Props) { |
There was a problem hiding this comment.
Не вижу смысла изобретать велосипед для хранения данных приложения - лучше выбрать один из распространённых паттернов (flux / redux)
| changeTrackArr(true); | ||
| newBoard(); | ||
| setRemainingMines(0); | ||
| // sessionStorage.setItem('trackingArray', ) |
There was a problem hiding this comment.
Закомменченего кода быть не должно
| return <LoseIcon />; | ||
| case 'waiting': | ||
| case 'paused': | ||
| case 'playing': |
There was a problem hiding this comment.
Все эти строки лучше вынести в константы
| @@ -0,0 +1,12 @@ | |||
| export default function checkForWon( | |||
There was a problem hiding this comment.
Лучше использовать обычный экспорт вместо export default, к компонентам это тоже относится
| minesPositions.push({ x, y }); | ||
|
|
||
| if (x + 1 < width) { | ||
| if (y + 1 < height && arr[x + 1][y + 1] !== -1) arr[x + 1][y + 1] += 1; |
There was a problem hiding this comment.
Лучше завернуть выражение в { } т.к. без них сложнее понять код
Basic scope (28/30)
Advanced scope (18/50)
Hacker scope (0/20)