Изменения состояния асинхронны (как компонентные, так и подключаемые). Таким образом, ваше состояние не обновляется к тому времени, когда вы звоните paintNode
. Есть два способа обдумать это. Один из них заключается в том, чтобы поместить вызов paintNode
в ваши nodeTypePointer
useEffect
, например, так:
useEffect(() => {
paintNode(x,y);
}, [nodeTypePointer])
, но это означает, что вам нужно сохранить x
и y
of clicked один в некоторых стандартных переменных, так как вы не сможете передать их непосредственно в useEffect
. Другой способ (и, возможно, лучший, так как я не большой поклонник изменений состояния, имеющих побочные эффекты) - просто передать x / y прямо в paintNode
во время функции handleMouseDown
:
paintNode(x, y, grid[x][y])
однако, похоже, что updateGridPosition
также требуется х / у, так что, возможно, вам будет лучше сохранить исходное нажатое в состоянии, затем иметь useEffect
для нажатого, которое делает все, что нужно после нажатия на узел. Все зависит от того, как будет выглядеть эта функция.
Но да, причина вашей ошибки в том, что изменения состояния асин c, поэтому она не обновляется к тому времени, когда вы вызываете paintNode