【发布时间】:2020-05-21 14:08:52
【问题描述】:
点击交叉时它会变为零,因为我们设置了状态,但这是如何变化的 反映到全局 arr 这就是为什么它不会第二次重置的原因。它也不是第一次重置,而是为了显示效果我添加了 arr2
所以我想这可能是由于 let arr 所以我将其更改为 cosnt arr 但仍然无法正常工作。 所以我添加了一个新的 arr2 const 来测试,但它只在第一次工作
const cross = "http://clipart-library.com/data_images/49124.png"
const zero = "http://clipart-library.com/data_images/367486.png"
const arr = [[cross,cross,cross],
[cross,cross,cross],
[cross,cross,cross]]
const arr2 = [[cross,cross,cross],
[cross,cross,cross],
[cross,cross,cross]]
class ResetButton extends React.Component{
constructor(props){
super(props)
this.reset = this.reset.bind(this)
}
reset(){
this.props.reset()
}
render(){
return <div>
<h>Reset all img to cross </h>
<button onClick={this.reset}>{"RESET"} </button>
</div>
}
}
class Box extends React.Component{
constructor(props){
super(props)
this.changeImage = this.changeImage.bind(this)
}
changeImage(r,c){
this.props.changeImage(r,c)
}
render(){
let row = this.props.row
let column = this.props.column
return <img src = {this.props.src} height={25} width={25} onClick={()=>this.changeImage(row,column)} />
}
}
class BoxColumn extends React.Component{
constructor(props){
super(props)
this.changeImage = this.changeImage.bind(this)
}
changeImage(r,c){
this.props.changeImage(r,c)
}
render(){
let row = this.props.row
return <div>
{this.props.src.map((i,j)=><Box src={i} row={row} column={j} changeImage={this.changeImage} key={j}/>) }
</div>
}
}
class BoxRow extends React.Component{
constructor(props){
super(props)
this.state = {src :arr}
this.changeImage = this.changeImage.bind(this)
this.reset = this.reset.bind(this)
}
reset(){
this.setState({src:arr2})
}
changeImage(r,c){
//console.log(r,c)
let srcArr = [...this.state.src]
srcArr[r][c] = zero
this.setState({src:srcArr})
}
render(){
return <div>
<p>Click on image to change cross image to zero</p>
{this.state.src.map((i,j)=><BoxColumn src={i} row={j} changeImage={this.changeImage} key={j}/>) }
<ResetButton reset={this.reset}/>
</div>
}
}
ReactDOM.render(<BoxRow />,
document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.0.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.0.0/umd/react-dom.production.min.js"></script>
<div id="root"> </div>
【问题讨论】:
-
你的问题有点不清楚。你能重新编辑你的问题吗?你能添加你的错误吗?
-
我可以通过单击 img 元素将交叉图像更改为零图像,我希望每当我从零选择类型或交叉时,所有图像都应重新初始化为交叉
-
其实我正在制作井字游戏可能是这个帮助
-
let srcArr = [...this.state.src]只会复制外部数组 - 您还需要复制您修改的内部数组。 -
你能描述一下我需要在哪里复制内部 arr
标签: javascript reactjs setstate