React/Javascript无序代码执行

React/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

关于我之前的问题(代码仍然给我带来麻烦):

代码在这里

你可以在第2行看到我的物体。虽然打印输出不同(如下所示),但在2和5之间没有发生突变,这使我相信代码是按顺序执行的

codeBreaker.js:108

    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]);