我试图建立一个连接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>
)
}
}
您需要在代码中更改许多内容:
*首先,永远不要将UI项
存储在状态变量中,state
变量应该只包含数据和值。
*永远不要通过this.state.a=''或this.state.a.push({})
对state
变量进行任何更改,始终将state
值视为不可变,并且只使用setstate
更改该值。
*如果您想要动态地创建,请始终调用
render
内的函数,该函数将直接创建UI部分
。
从render调用Makerow
方法,它将直接返回ui,而不将其存储在状态变量中,如下所示:
makeRow(){
var component = [];
for(var i = 0; i < 6; i++){
component.push(<Space key={i} className="space"/>);
}
return component;
}
render(){
return(
<div className="column">
<DropButton onClick={() => this.handleClick()} id={'button-' + this.props.colNumber}
buttonNumber={this.props.colNumber} className={this.props.className}/>
{this.makerow()}
</div>
)
}
我正在构建一个PhotoViewer,当用户按左键或右键时,它可以更改照片。我正在使用React、Redux、React router和React router Redux。当用户按下左键或右键时,我会做两件事,使用并发送一个操作来更新当前查看的照片,。我订阅状态更改以进行调试。 上面的每一行都会触发一个新的状态更改。因为我更新了,所以发送操作会更新存储,而更新url会更新存储,因为react r
问题内容: 我这里有一些简单的代码 每次单击按钮,控制台上都会显示2条日志,指示该组件呈现两次。 这是一个codeandbox链接,可以尝试一下。 问题答案: 呈现您的App组件的原因是在其中导致代码在严格模式下运行,并且在严格模式下,控制台显示两次,因为每个功能在开发模式下均运行两次 根据react docs: 严格模式无法自动为您检测副作用,但可以通过使其更具确定性来帮助您发现它们。这是通过有
我在一个表单上有一个TextField输入,问题是当我在它上键入时,刚刚键入的值的显示/呈现有一种延迟,我想防止这种延迟。 代码:
我在useEffect钩子中调用一个GetAPI,以在组件装载之前获取数据,但是它多次调用API,并且我得到一个错误“多次API调用”。 输出: 请让我知道这是在组件使用useEffect钩子呈现之前从API获取数据的最佳方法。
我使用c#在Visual Studio中创建了一个WebApi服务器。客户端应用程序通过以下方式调用服务: 第一次就可以了。如果我再次尝试从客户端使用此服务,它将始终失败,并出现ServerProtocolViolation异常。 如果我再试一次,它再次正常工作。然后在第二次尝试时发生相同的错误。此外,当我尝试调用不同的方法时,第二个总是会崩溃。 这是例外: null 任何人想要一个主意都是我的错
当我们点击“添加”链接时,我试图呈现需要组件。下面是主要组件的代码: 下面是以防万一的需求组件: 我在第一次单击add链接时实现了我试图实现的目标,即在第一次单击add链接时,need组件没有任何条件地被呈现,当我单击“add”时,need组件再次被呈现,但当我第二次单击“add”链接时,我没有看到任何变化。为什么会这样,我希望在每次单击“Add”链接时呈现Need组件。