javascript - 在 If 语句中反应 setState
问题描述
我正在使用 React 制作国际象棋游戏,并且正在尝试编写一个函数来计算选择某个棋子时应突出显示的方格。我将游戏作为一个组件,将每个棋子作为第二个组件,并且国际象棋组件中的按钮在单击时从游戏组件调用一个函数。
当且仅当所选部分是正确的颜色时,我想突出显示适当的方块,因此我在我的 handleClick() 函数的 if 语句中调用了 setState。在 if 语句中阅读setState() 的问题后,我移动了条件,以便 handleClick 函数仅链接到正确颜色的部分。
现在的问题是状态会根据需要更改,但由于某种原因,组件不会重新渲染以反映该更改。有人可以让我知道如何解决这个问题吗?这是我处理点击的代码:
handleClick(num){
this.setState(prevState => {
return {
gameBoard: prevState.gameBoard,
turn: prevState.turn,
selected: num
}
})
}
这是我创建板的代码:
<div>
{
this.state.gameBoard.map((object)=>
<div className = "board-row"> {object.map((object2) =>
<Piece key={object2.at} turn = {this.state.turn} selected = {object2.selected} piece = {object2.piece} identifier = {object2.at} onClick = {() => this.handleClick(object2.at)} color = {(object2.at+Math.floor(object2.at/8))%2 === 0?"white":"black"} />)}
</div>
)
}
</div>
解决方案
尝试:
handleClick(num){
this.setState(prevState => {
return {
...prevState,
selected: num
};
})
}
推荐阅读
- geopandas - osmnx.plot_graph 如何确定哪些边得到哪些颜色?
- python - Python Pillow 文本无法正确显示字符
- javascript - 在获取数据之前异步获取 API 时返回 Null
- tensorflow - 在 Keras 中保存带有列表的模型
- firebase - 上传文件时了解 Firebase 存储
- regex - perl 正则表达式从字符串中删除初始的全空白行:为什么它有效?
- python - 在 VS Code Jupyter Notebook 中打开字符串时有没有办法关闭建议弹出窗口
- python - IB API:检查是否在交易中或有未结订单
- imacros - 使用 iMacros 从 Excel CSV 中选取数据
- reactjs - 如何使用 typescript 在 Nextjs 的 getServerSideProps 中输入类型?