React 2d Array of randomly placed components 不同步
React 2d Array of randomly placed components desync
我正在尝试在 React 中创建扫雷程序并 运行 遇到了一个严重的问题。
我创建了一个名为游戏的带有炸弹和盒子组件的二维数组,一切正常,除了在创建原始游戏后的某个时间创建了一个全新版本的游戏。
我 console.log 组件呈现之前的游戏,这与显示的游戏完全不同。我有一个按钮,控制台在呈现后记录当前游戏,并在屏幕上显示游戏。
function setBombs() {
//creates map of board ie. [[false, false, false], [false, true, false], [false, false, false]]
}
console.log(game)
//Prints empty. Good
setBombs();
for (let i = 0; i < Map.length; i++) {
let arr = []
for (let j = 0; j < Map[i].length; j++) {
// pushes true(bomb) or false(box) depending if it is going to be a bomb
// pushes bomb or numbered box component based on a map created before
arr.push(decideBomb(numBombs, i, j));
}
game.push(arr);
//Prints each version of game. Good
console.log(game)
}
//Prints Correct game. Good
console.log(game);
return (
<div>
<h1>Minesweeper</h1>
{/* Ends up being different game. Bad! goal: make them the same*/}
<div style={style} className="Grid">{game}</div>
<button onClick={()=>{console.log(game)}}>clgrid</button>
</div>
);
我希望for循环中的版本与屏幕上的版本相同。
我应该找到解决方法吗?或者有什么方法可以防止生成不同的游戏吗?
您应该尝试将您的函数放入 useEffect,
(就像你的 for 循环和你的 setBombs()
电话)
这样代码只会像这样执行一次:
React.useEffect(() => {
setBombs();
for (let i = 0; i < Map.length; i++) {
let arr = []
for (let j = 0; j < Map[i].length; j++) {
// pushes true(bomb) or false(box) depending if it is going to be a bomb
// pushes bomb or numbered box component based on a map created before
arr.push(decideBomb(numBombs, i, j));
}
game.push(arr);
//Prints each version of game. Good
console.log(game)
}
}, [])
文档 here.
我正在尝试在 React 中创建扫雷程序并 运行 遇到了一个严重的问题。
我创建了一个名为游戏的带有炸弹和盒子组件的二维数组,一切正常,除了在创建原始游戏后的某个时间创建了一个全新版本的游戏。
我 console.log 组件呈现之前的游戏,这与显示的游戏完全不同。我有一个按钮,控制台在呈现后记录当前游戏,并在屏幕上显示游戏。
function setBombs() {
//creates map of board ie. [[false, false, false], [false, true, false], [false, false, false]]
}
console.log(game)
//Prints empty. Good
setBombs();
for (let i = 0; i < Map.length; i++) {
let arr = []
for (let j = 0; j < Map[i].length; j++) {
// pushes true(bomb) or false(box) depending if it is going to be a bomb
// pushes bomb or numbered box component based on a map created before
arr.push(decideBomb(numBombs, i, j));
}
game.push(arr);
//Prints each version of game. Good
console.log(game)
}
//Prints Correct game. Good
console.log(game);
return (
<div>
<h1>Minesweeper</h1>
{/* Ends up being different game. Bad! goal: make them the same*/}
<div style={style} className="Grid">{game}</div>
<button onClick={()=>{console.log(game)}}>clgrid</button>
</div>
);
我希望for循环中的版本与屏幕上的版本相同。
我应该找到解决方法吗?或者有什么方法可以防止生成不同的游戏吗?
您应该尝试将您的函数放入 useEffect,
(就像你的 for 循环和你的 setBombs()
电话)
这样代码只会像这样执行一次:
React.useEffect(() => {
setBombs();
for (let i = 0; i < Map.length; i++) {
let arr = []
for (let j = 0; j < Map[i].length; j++) {
// pushes true(bomb) or false(box) depending if it is going to be a bomb
// pushes bomb or numbered box component based on a map created before
arr.push(decideBomb(numBombs, i, j));
}
game.push(arr);
//Prints each version of game. Good
console.log(game)
}
}, [])
文档 here.