使用更新不可变性助手,我得到错误提示:在引用先前状态时在setState中使用回调

时间:2019-12-26 13:29:37

标签: reactjs setstate

先谢谢了。我使用不变性-帮助者设置状态。但是我在this.setState附近遇到eslint错误,它说:Use callback in setState when referencing the previous state 由于我使用不变性助手,是否有任何解决方法,我是否需要使用prevState 任何人都可以分享正确的方法。

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],
          ],
        },
      }),
    ); };

2 个答案:

答案 0 :(得分:1)

尝试一下:

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

答案 1 :(得分:0)

它告诉你这样做:

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

如果状态快速连续更改了多次,react可以批处理这些更改并将其全部应用到单个渲染中。结果,如果您调用update并传递this.state,则不能保证this.state处于最新状态,因此最终可能会抛出由另一个状态更新。

如果改为使用setState的函数版本,则确保 处于最新状态,并且消除了可能的错误。