3 回答

TA贡献1796条经验 获得超7个赞
将您的代码复制并粘贴到一个片段中,以演示我一小时前发表的评论。
尝试在渲染中记录它
class Tile {
constructor(column, row, something, player) {
this.column = column;
this.row = row;
this.something = something;
this.player = player;
}
}
class App extends React.Component {
state = {
size: 3,
};
createTileArray() {
let new_array = [];
let size = this.state.size;
for (let row = 0; row < size; row++) {
for (let column = 0; column < size; column++) {
if (row === 0 || row === 1) {
//Player 1
new_array.push(new Tile(column, row, true, 1));
} else if (row === size - 1 || row === size - 2) {
//Player 2
new_array.push(new Tile(column, row, true, 2));
} else {
//Empty Tile
new_array.push(new Tile(column, row, false, 0));
}
}
}
console.log('Tile to be set into the state', new_array);
this.setState({
tile_arrays: new_array,
});
}
componentDidMount() {
this.createTileArray();
}
render() {
//was that so difficult?
console.log('tile arrays', this.state.tile_arrays);
return (
<pre>{JSON.stringify(this.state, undefined, 2)}</pre>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>

TA贡献2051条经验 获得超10个赞
setState是异步的,但它确实允许回调。
this.setState(
{ tile_arrays: tile_array },
() => console.log("Updated Tiles: ", this.state.tile_arrays)
)

TA贡献1830条经验 获得超3个赞
经过一些测试,我找到了解决方案。在我的组件的初始构造函数中,而不是设置
tile_arrays:null
我将它设置为等于一个空数组
tile_arrays:[]
该问题似乎已解决并且现在可以正常工作。
添加回答
举报