Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 无法正确更新React状态变量_Javascript_Reactjs_Function - Fatal编程技术网

Javascript 无法正确更新React状态变量

Javascript 无法正确更新React状态变量,javascript,reactjs,function,Javascript,Reactjs,Function,我正在使用我的第一个React应用程序骰子滚动应用程序。当我调用函数来控制骰子时,我有一个troble,所以随机给每个骰子我需要的随机数 这是我在App类中的构造函数和两个我想在按下按钮时执行的函数。当我按下按钮时,会执行rollTheDice函数,并给出随机数,同时也会更新状态;然后,当函数diceSum运行时,它会对旧的状态日期进行求和。例如,在第一个掷骰子函数中,sum将给出数字2 constructor() { super(); this.state =

我正在使用我的第一个React应用程序骰子滚动应用程序。当我调用函数来控制骰子时,我有一个troble,所以随机给每个骰子我需要的随机数

这是我在App类中的构造函数和两个我想在按下按钮时执行的函数。当我按下按钮时,会执行rollTheDice函数,并给出随机数,同时也会更新状态;然后,当函数diceSum运行时,它会对旧的状态日期进行求和。例如,在第一个掷骰子函数中,sum将给出数字2

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。