javascript - 状态在 react 中更新

标签 javascript reactjs

我正在使用react js。在存储在我的状态中的数组中,我在用户操作中更新该数组。然后我检查这个数组的总和,如果它超出了我显示错误的值。现在问题发生了,它显示错误,但它仍然更新值

 updateValuePercent = key => {
    let MixDataTemp = [...this.state.MixData];
    let MixData = [...MixDataTemp];

let reduceValue = 0.005 / 4;
MixData.map(data => {


        data.mix.map(name => {

          if (name.pk === key.pk) {

                name.volume = name.volume - 0.005;

          } else {

            name.volume = name.volume - reduceValue;

            } 
          return name;
        });
        return data;

    });
  let nwSum = updatedData

      .map(data => data.mix)
      .map(data => data.volume)
      .reduce((a, b) => a + b);
if (nwSum <= 1) {//condition to update the data
      this.setState({
        MixData: updatedData,
        MixError: ''
      });
    } else {
      this.setState({ MixError: 'values can not go beyond one' });//showing error on page still updating the state
    }
}

我知道我所做的是可变的,我不应该这样做,但至少它不应该是我的状态,至少我应该获取状态的不可变副本

编辑1: 这是我的codepen link

最佳答案

如果你真的不想显示状态中的 MixData 值,我会明确告诉 React 它为 null(或者某个值,让用户清楚地知道它不能递增)即:

if (nwSum <= 1) {
  this.setState({
    MixData: updatedData,
    MixError: ''
  });
} else {
  this.setState({
   MixData: null,
   MixError: 'values can not go beyond one'
  });
}

看起来您在 else block 中实际上只返回 state 中的 MixError 值。根据您的代码,我不希望看到 MixData 的任何值,因为它没有被复制。要复制 MixData 的先前值,您需要使用扩展运算符,即:

this.setState({
  ...this.state,
  MixError: 'values can not go beyond one'
});

祝你好运!

关于javascript - 状态在 react 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633831/

相关文章:

javascript - React Native 对元素的引用在平面列表项中未定义

javascript - 在react-json-tree中显示HTML标签

javascript - axios 请求中未发送正文数据

javascript - 如何在 React Web 应用程序中拍照(非 native )

javascript - JavaScript 中逗号分隔的对象是什么?

javascript - Jscript 在开发和测试机器上返回不同的(计算的)结果 - 使用相同的代码

javascript - 如何使用 JavaScript 重定向到主页

javascript - 否则如果在谷歌脚本中

javascript - 如何使用 jQuery 根据数组过滤结果

javascript - 为什么我的组件不显示在我的 React 页面上?