首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用update不可变性助手,我得到了eslint错误:在引用上一种状态时,在setState中使用回调

使用update不可变性助手,我得到了eslint错误:在引用上一种状态时,在setState中使用回调
EN

Stack Overflow用户
提问于 2019-12-26 13:29:37
回答 2查看 91关注 0票数 0

提前谢谢。我使用不变的助手来设置状态。但是,我在this.setState附近得到了隐晦的错误,它说:Use callback in setState when referencing the previous state是否有任何工作,因为我使用不变的助手,我需要使用prevState,可以共享任何校正的方法。

代码语言:javascript
复制
import update from 'immutability-helper';

moveSection = (dragIndex, hoverIndex) => {
    const { list} = this.state;
    const dragCard = list[dragIndex];

    this.setState(
      update(this.state, {
        list: {
          $splice: [
            [dragIndex, 1],
            [hoverIndex, 0, dragCard],
          ],
        },
      }),
    ); };
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-26 13:35:35

试试这个:

代码语言:javascript
复制
this.setState(
  (state) => {
     return update(state, {
       list: {
         $splice: [
           [dragIndex, 1],
           [hoverIndex, 0, dragCard],
         ],
       },
     })
  }
);
票数 2
EN

Stack Overflow用户

发布于 2019-12-26 13:35:58

它告诉你要这么做

代码语言:javascript
复制
this.setState(prevState => 
  update(prevState, {
    list: {
      $splice: [
        [dragIndex, 1],
        [hoverIndex, 0, dragCard],
      ],
    },
  }),
);

如果快速连续地多次更改状态,则react可以对这些更改进行批次处理,并将它们全部应用于一个呈现中。因此,如果调用update并传入this.state,则无法保证this.state具有最近的状态,因此最终可能会抛出其他状态更新所做的更改。

如果您使用的是setState的函数版本,那么您肯定会得到最新的状态,并且消除了这个可能的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59489194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档