javascript - 无法正确更新 React 状态变量

标签 javascript reactjs function

我正在使用我的第一个 React 应用程序(骰子应用程序)。当我调用函数来掷骰子时,我遇到了麻烦,因此随机为每个骰子提供必要的随机数。

这是我在 App 类中的构造函数和我想要在按下按钮时执行的两个函数。当我按下按钮功能rollTheDice()被执行并给出随机数,并且(某种程度上)用 this.setState({diceNumber: copyDiceNumber}); 更新状态然后当函数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 如何渲染状态,在文章 link 中它说状态在函数完成后更新,但我如何调用 diceSum()仅在rollTheDice()之后起作用功能完成了吗?

最佳答案

setState 采用第二个参数,即一个函数,仅在设置状态后调用该函数。所以你可以像这样在这里使用相同的

   ... 
   this.setState({diceNumber: copyDiceNumber}, this.diceSum);
   ...

   or

   ... 
   this.setState({diceNumber: copyDiceNumber}, () => this.diceSum());
   ...

关于javascript - 无法正确更新 React 状态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996079/

相关文章:

reactjs - 为什么 React 无状态函数不能返回数组?

reactjs - 属性 'type' 在类型中缺失。但在类型 'Props' 中是必需的

javascript - 函数内外的不同输出

javascript - 如何在基于 ReactJS 的 Node 应用程序中从外部 API 获取服务器端数据?

c++ - 函数calculatePrice 的错误类型冲突

r - 在 R 包中包含 R 脚本

javascript - 带线条的 Google API 饼图

JavaScript,这有什么问题吗?

javascript - 如何在 Stenciljs 中获取 DOM 元素?

javascript - 从 api.ai 的 json 响应数组中提取文本