Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我';我用的是同一个物体??反应_Javascript_Reactjs_This_Reactive Programming - Fatal编程技术网

Javascript 如果我';我用的是同一个物体??反应

Javascript 如果我';我用的是同一个物体??反应,javascript,reactjs,this,reactive-programming,Javascript,Reactjs,This,Reactive Programming,嗨,情况是这样的。我正在用react构建一个Tictatcoe游戏,我有3个组件 1.配子亲本 2.板 3.游戏控制 我在GameParent组件中有一个函数,它有两个状态属性,称为AI和Game,它们是对象。我将这些对象作为道具向下传递到板组件。它还有一个名为startGame()的函数 调用this.state.Game.start()时,游戏对象中有一个名为status的属性,该属性应更改为“running” 我将startGame()函数向下传递给gameControls组件,并将其连接

嗨,情况是这样的。我正在用react构建一个Tictatcoe游戏,我有3个组件 1.配子亲本 2.板 3.游戏控制

我在GameParent组件中有一个函数,它有两个状态属性,称为AI和Game,它们是对象。我将这些对象作为道具向下传递到板组件。它还有一个名为startGame()的函数

调用this.state.Game.start()时,游戏对象中有一个名为status的属性,该属性应更改为“running”

我将startGame()函数向下传递给gameControls组件,并将其连接到单击处理程序上的start button

我的棋盘组件处理棋盘方块上的点击,但它只在游戏状态为“运行”时注册点击,但我一直获得状态为“开始”的对象

因此,当我添加这4个console.logs时,当我只打印这4个时,我看到游戏对象的状态是“开始”,而当我添加console.log this.state和this.state.Game时,状态设置为“正在运行”

我很困惑为什么会发生这种事。。。我猜这是React更新它的子对象的方式,但我还没有从阅读render()和setState()的工作原理中找到解释。或者,当我将函数和对象传递给子组件时,我可能没有完全理解“这”是如何影响的

如果你们想看到完整的代码,这里是链接

  • 不应将函数置于状态内。状态仅用于数据。我认为这可能是导致意外行为的一个原因

  • this.setState
    是一个异步函数,这意味着不能保证在调用
    this.setState
    后立即设置状态。这可以解释控制台的意外输出。日志

  • 不应将函数置于状态内。状态仅用于数据。我认为这可能是导致意外行为的一个原因

  • this.setState
    是一个异步函数,这意味着不能保证在调用
    this.setState
    后立即设置状态。这可以解释控制台的意外输出。日志


  • 这可能与的问题相同。这可能与的问题相同。
    startGame() {
      let newAI = new AI(this.state.AIIdentity);
      let newGame = new Game(newAI,this.state.AIIdentity);
      this.state.AI.plays(this.state.Game);
      this.state.Game.start();
      this.setState({
        start: true,
        AI: newAI,
        Game: newGame,
      });
    console.log("THIS!!!",this)
    console.log("THIS!!!",this.state)
    console.log("THIS!!!",this)
    console.log("THIS!!!",this.state.Game);
    }