【发布时间】:2017-07-23 21:56:04
【问题描述】:
我正在尝试构建一个连接 4 游戏,它有一个由 7 个列组件组成的棋盘组件,所有组件都包含 6 个空间组件。每列上方都有一个放置按钮,用于将片段放入列中。为了在“红色”和“黑色”玩家之间交替,我创建了一个状态“redOrBlue”,它返回一个布尔值。
简而言之,当单击 Drop 按钮时,我想切换“redOrBlue”的值以跟踪轮到谁了。我已将 onClick 函数设置为 setState({redOrBlue: !this.state.redOrBlue)},但是,调用此函数将导致 react 在单击按钮的列的正下方呈现一个额外的列。我知道 setState 会自动重新渲染 DOM,但我怎样才能避免它渲染组件的副本?感谢您的帮助!
class Column extends Component{
constructor(){
super();
this.state = {
myArray: [],
buttonArray: [],
buttonNumber: null,
newArray: [],
redOrBlue: true
}
}
makeRow(){
var component = <Space className="space"/>
for(var i = 0; i < 6; i++){
this.state.myArray.push(component);
}
}
handleClick(){
var num = this.props.colNumber;
var array = this.props.boardArray[num];
var boolean = false;
var color;
if(this.state.redOrBlue === true){
color = "red"
}else{
color = "black"
}
for(var i = 5; i > -1; i--){
if(boolean === false){
if(array[i] === null){
array[i] = color;
boolean = true;
}
}
}
this.setState({redOrBlue: !this.state.redOrBlue})
console.log(array)
}
render(){
{this.makeRow()}
return(
<div className="column">
<DropButton onClick={() => this.handleClick()} id={'button-' + this.props.colNumber} buttonNumber={this.props.colNumber} className={this.props.className}/>
{this.state.myArray.map(function(component, key){
return component
})}
</div>
)
}
}
【问题讨论】:
标签: javascript reactjs components