I am developing an application in react typescript environment and I faced a problem which I cannot resolve on my own. Whenever I try to set state to its initial value I get my UI updated although console.log(state) would still return previous state. When I console.log it using useEffect with dependency to my state I get the updated value printed out.
My biggest concern is how can that happen that react 'saves' previous state somewhere and uses it when user is performing a drag and drop interaction.
const [board, setBoard] = useState(initialState);
function clearBoard(){
updateBoard(initialState)
console.log(board)
}
function updateBoard(board: UnitHex[][]){
setBoard(board);
//some side actions
}
const draggableElements = document.querySelectorAll(".draggable");
const droppableElements = document.querySelectorAll(".droppable");
function dragStart(event: any) {
event.dataTransfer.setData("text", event.target.id);
}
function dragOver(event: any) {
event.preventDefault();
}
function drop(event: any) {
event.preventDefault();
var tempBoard: UnitHex[][] = board;
console.log("inside drop fn")
console.log(tempBoard);
//drop logic
updateBoard(tempBoard);
event.stopImmediatePropagation();
}
useEffect(() => {
droppableElements.forEach((element) => {
element.addEventListener("dragover", dragOver);
element.addEventListener("drop", drop);
});
draggableElements.forEach((element) => {
element.addEventListener("dragstart", dragStart);
});
console.log(board)
}, [board]);
Does anyone know what's going on? Thanks in advance!!