React/Javascript无序代码执行
关于我之前的问题(代码仍然给我带来麻烦): 代码在这里 你可以在第2行看到我的物体。虽然打印输出不同(如下所示),但在2和5之间没有发生突变,这使我相信代码是按顺序执行的 codeBreaker.js:108React/Javascript无序代码执行,javascript,reactjs,flow,Javascript,Reactjs,Flow,关于我之前的问题(代码仍然给我带来麻烦): 代码在这里 你可以在第2行看到我的物体。虽然打印输出不同(如下所示),但在2和5之间没有发生突变,这使我相信代码是按顺序执行的 codeBreaker.js:108 1. console.log("BEFORE") 2. console.log(gameBoardCopy[currentRow]) 3. console.log("END") let copy = this.state.gameBoard[current
1. console.log("BEFORE")
2. console.log(gameBoardCopy[currentRow])
3. console.log("END")
let copy = this.state.gameBoard[currentRow].slice()
4. console.log("Copy Start")
5. console.log(copy)
6. console.log("Before Assignment")
copy[4] = { numColorMatch: 2, numExactMatch: 2 }
7. console.log("After Assignment")
8. console.log(copy)
9. console.log("copy end")
查看输出
我不知道是什么原因造成的,谢谢。谢谢看起来您无意中改变了组件的状态。您没有在此处复制对象。Javascript对象通过引用传递,这意味着当您直接将这样的对象分配给另一个变量时,它们都将修改相同的数据 而不是:
let copy = this.state.gameBoard[currentRow].slice()
电话:
如果您打算更新组件的状态,则应调用.setState({obj})
如果必须深度克隆对象,我建议使用或(或创建自己的:)中的深度复制函数
希望这能有所帮助,
console.log实际上是一种异步方法,这很可能就是您看到执行“出现”无序的原因。每当您console.log
一个对象时,确保console.log(JSON.stringify(JSON.parse(value))代码>
查看执行顺序及其值的更好方法是添加debugger
语句。尝试添加调试器代码>位于步骤5的正上方,浏览代码以查看实际值。我可以想象这些价值观会和你期望的一样。如果没有,则使用调试器单步执行该过程将告诉您原因。是否将此记录在构造函数中?如果是这样,请尝试登录componentDidMount()
。让我知道结果。这在我身上发生过一次,但我还不记得我做了什么。在我的onclick函数中,请在这里随意查看代码。js:108
0: "BlueViolet"
1: "BlueViolet"
2: "BlueViolet"
3: "BlueViolet"
4: {numColorMatch: 2, numExactMatch: 2}
0: "BlueViolet"
1: "BlueViolet"
2: "BlueViolet"
3: "BlueViolet"
4: {numColorMatch: 2, numExactMatch: 2}
let copy = this.state.gameBoard[currentRow].slice()
let copy = Object.assign({}, this.state.gameBoard[currentRow]);