Javascript 无法正确更新React状态变量
我正在使用我的第一个React应用程序骰子滚动应用程序。当我调用函数来控制骰子时,我有一个troble,所以随机给每个骰子我需要的随机数 这是我在App类中的构造函数和两个我想在按下按钮时执行的函数。当我按下按钮时,会执行rollTheDice函数,并给出随机数,同时也会更新状态;然后,当函数diceSum运行时,它会对旧的状态日期进行求和。例如,在第一个掷骰子函数中,sum将给出数字2Javascript 无法正确更新React状态变量,javascript,reactjs,function,Javascript,Reactjs,Function,我正在使用我的第一个React应用程序骰子滚动应用程序。当我调用函数来控制骰子时,我有一个troble,所以随机给每个骰子我需要的随机数 这是我在App类中的构造函数和两个我想在按下按钮时执行的函数。当我按下按钮时,会执行rollTheDice函数,并给出随机数,同时也会更新状态;然后,当函数diceSum运行时,它会对旧的状态日期进行求和。例如,在第一个掷骰子函数中,sum将给出数字2 constructor() { super(); this.state =
constructor() {
super();
this.state = {
diceNumber: [1,1],
total: 0,
}
}
rollTheDice = () => {
// console.log(this.state.diceNumber);
console.log("Before roling" + this.state.diceNumber)
let copyDiceNumber = this.state.diceNumber.slice();
copyDiceNumber.map( (e,i) => {
// console.log(e);
copyDiceNumber[i] = Math.floor(Math.random() * (6 - 1) + 1)
});
this.setState({diceNumber: copyDiceNumber});
this.diceSum();
console.log("After roling" + this.state.diceNumber)
// console.log(this.state.diceNumber);
};
diceSum = () => {
let sum = 0;
for (let i of this.state.diceNumber){
sum = sum + i;
console.log(sum);
}
this.setState({total: sum})
};
我认为这可能是因为关于React如何呈现状态,在文章中说状态在函数完成后更新,但我如何才能在rollTheDice函数完成后调用diceSum函数?setState使用第二个参数,即一个函数,该函数仅在设置状态后调用。所以你可以像这样用这个
...
this.setState({diceNumber: copyDiceNumber}, this.diceSum);
...
or
...
this.setState({diceNumber: copyDiceNumber}, () => this.diceSum());
...
当我尝试这样做时,`this.setState{diceNumber:copyDiceNumber},this.diceSum;,然后我把console.logAfter roling+this.state.diceNumber`放在diceSum中,得到打印值1,1。这意味着在函数未完成之前状态不会更新。@请注意,我的答案中没有括号。您正在执行此操作。diceSum而不是this。diceSum抱歉,我的错误您的代码是正确的,我刚刚添加了带括号的this.diceSum。