Reactjs 反应:如何在后续的setState()调用中使用this.state?如何强制更新此.state?
我正在开发一个小应用程序,您可以使用它跟踪一些游戏分数 这场比赛由两名选手进行。一名球员可以得分,但也可能受到处罚。不是从球员的得分中减去点球,而是将点球加到对手的得分中。对手也应该得到下一个回合 我设置了一个实现上述描述的演示: 正如您在演示中所看到的,这并不完全有效:当一名球员受到处罚时,他将被判罚点球,而不是他的对手 这是由于Reactjs 反应:如何在后续的setState()调用中使用this.state?如何强制更新此.state?,reactjs,Reactjs,我正在开发一个小应用程序,您可以使用它跟踪一些游戏分数 这场比赛由两名选手进行。一名球员可以得分,但也可能受到处罚。不是从球员的得分中减去点球,而是将点球加到对手的得分中。对手也应该得到下一个回合 我设置了一个实现上述描述的演示: 正如您在演示中所看到的,这并不完全有效:当一名球员受到处罚时,他将被判罚点球,而不是他的对手 这是由于setTurn中的setState未立即处理setScore仍使用“旧”状态,在该状态下,turn尚未更新 我知道这可以通过将回调传递给setState而不是对象(参
setTurn
中的setState
未立即处理setScore
仍使用“旧”状态,在该状态下,turn尚未更新
我知道这可以通过将回调传递给setState
而不是对象(参见注释代码)来处理,该对象接受以前设置的状态。如果我这样做,事情就会按预期的那样进行
但是,我还需要addScore
调用之外的setState
中更新的state值(在本例中为this.state.turn
)。我将如何实现这一点?我尝试了这个.forceUpdate()
但是没有用
我是否应该在setState
回调中包装addScore
的整个函数体?然后,如果需要,我将如何从addScore
方法返回基于this.state.turn的任何计算
附带问题:为什么这个.forceUpdate()不起作用?它是否只是触发重新呈现组件而不处理状态队列
谢谢你帮助我 我明白你现在在说什么了。据我所知,您试图做的是确保setState方法已在另一个setState方法之前执行
现在,文件中有这样一句话:
第二个参数是一个可选的回调函数,它将
完成设置状态并重新渲染组件后执行。
通常,我们建议对此类逻辑使用componentDidUpdate()
相反
因此,根据他们的建议,您应该使用componentdiddupdate()
。那么现在的问题是什么呢
componentDidUpdate(prevProps, prevState)
这就是方法签名。因此,我们可以在这里看到前一个状态被传入,现在我们可以通过this.state
访问当前状态
看看答案
基本上-我将addScore
和changeTurn
转换为只不过是setState
的片段的函数。这意味着我们可以将它们与或状态更改结合起来,以实现一个原子操作。它们可以重用,而无需为不同的场景添加复杂的默认参数
其次,为了设置状态,我添加了应用这些方法的函数。这些是按钮的用途
最后,在componentdiddupdate
函数中,现在有机会根据正在执行的当前操作应用操作。不要为默认操作添加setState,否则您将得到一个无限的更新循环……如果您真的处于当前状态以更改下一个状态,那么在setState中使用回调函数是获得您的评论的更好方法,@Callumlington。因此,如果我将整个函数体包装到setState
回调中,我将如何将回调体中的任何值返回到addScore
方法体?比如说,当玩家1的分数达到50分时,我想从addScore
返回一个值。