反应使用setState((prevState)=> {})的正确方法

时间:2020-06-06 01:01:50

标签: reactjs setstate

我刚刚开始学习React.js。这是关于setState()的问题。

我的新状态是根据我以前的状态计算的,因此我使用setState()作为以prevState作为参数的函数。请参阅下面的图片以获得代码和视图。

根据我在网上找到的一些示例,updatedCount变量是在调用setState()(ex1)之前创建的。我的问题是:我可以使用prevStateupdatedCount(ex2)内创建setState()。这是一个好习惯吗?如果不是,那么这种方法有什么问题呢?

ex1:

handleCountChange = (type, v) => {
  const updatedCount = this.state.counters[type] + v; // <--
  this.setState((prev) => {
    return {
      counters: {
        ...prev.counters,
        [type]: updatedCount,
      },
    };
  });
};

ex2:

handleCountChange = (type, v) => {
  this.setState((prev) => {
    const updatedCount = prev.counters[type] + v; // <--
    return {
      counters: {
        ...prev.counters,
        [type]: updatedCount,
      },
    };
  });
};

下面显示了用于更新两个计数器的完整示例代码:

enter image description here

1 个答案:

答案 0 :(得分:0)

是的,您可以在更新状态回调中更新状态之前创建变量并处理数据。

这在/* IF Ajax callback data = [{"dt":"2014-06-04","qt":"0"},{"dt":"2014-06-05","qt":"0"},{"dt":"2014-06-06","qt":"0"},{"dt":"2014-06-07","qt":"0"},{"dt":"2014-06-08","qt":"0"}] */ $.ajax({ url: 'calctimestat.php', method: 'POST', data: {dateone:dateOne,datetwo:dateTwo}, success: function(data) { var obj = jQuery.parseJSON(data); var result = []; var result1 = []; for(var i in obj) { result.push(obj[i]['qt']); result1.push(obj[i]['dt']); } console.log(JSON.stringify(result)); console.log(JSON.stringify(result1)); } }); 天内非常普遍,我已经做了很多,因为这是确保获取的数据与当前上下文保持最新的唯一方法。 / p>