在内联函数中使用时,为什么会出现“ no-unused-var”错误

时间:2018-11-21 21:39:28

标签: javascript reactjs ecmascript-6 eslint

这是我的代码的一部分:

public static int[] mergeSort(int[] array)
{
    if (array.length <= 1)
    {
        return array;
    }
    else
    {
        int[] linkeListe = Arrays.copyOfRange(array, 0, array.length/2);
        int[] rechteListe = Arrays.copyOfRange(array, linkeListe.length, array.length);

        mergeSort(linkeListe);
        mergeSort(rechteListe);
        return merge(linkeListe, rechteListe);
    }
}

public static int[] merge(int[] linkeListe, int[] rechteListe)
{
    int[] sortedArray = new int[linkeListe.length + rechteListe.length];
    int addElementPosition = 0;

    while (linkeListe.length > 0 && rechteListe.length > 0)
    {
        if (linkeListe[0] <= rechteListe[0])
        {
            sortedArray[addElementPosition] = linkeListe[0];
            linkeListe = deleteFirstElement(linkeListe);
        }
        else
        {
            sortedArray[addElementPosition] = rechteListe[0];
            rechteListe = deleteFirstElement(rechteListe);
        }

        addElementPosition++;
    }

    while (linkeListe.length > 0)
    {
        sortedArray[addElementPosition] = linkeListe[0];
        addElementPosition++;
        linkeListe = deleteFirstElement(linkeListe);
    }

    while (rechteListe.length > 0)
    {
        sortedArray[addElementPosition] = rechteListe[0];
        addElementPosition++;
        rechteListe = deleteFirstElement(rechteListe);
    }

    return sortedArray;
}

public static int[] deleteFirstElement(int[] array)
{
    int[] newArray;

    if (array.length > 1)
    {
        newArray = new int[array.length - 1]; 
        newArray = Arrays.copyOfRange(array, 1, array.length);
    }
    else
    {
        newArray = new int[0];
    }

    return newArray;
}

它生成以下错误:

const prevState = this.state;
this.setState(prevState => ({
  companies_checked: {
    ...prevState.companies_checked,
    [target.value]: target.checked
  }
}));

我正在使用内联/箭头功能中的变量。使错误消失的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

  

我在inline / arrow函数中使用了变量。

不,你不知道。您在函数中使用的prevState被声明为函数的参数。从外部作用域遮盖了const声明的prevState

  

使错误消失的最佳方法是什么?

假设函数按原样运行,只需省略const声明。

答案 1 :(得分:2)

尝试以下操作(即删除声明prevState的行):

this.setState(prevState => ({
  companies_checked: {
    ...prevState.companies_checked,
    [target.value]: target.checked
  }
}));

Eslint抱怨之后,您声明了常量prevState,而从未使用过它。解决该问题的正确方法是根本不声明它。

prevState调用中的setState是正确的-发送到回调函数的第一个参数setState是先前的状态,这是您要在回调中使用的状态功能。

答案 2 :(得分:0)

我认为这只是命名冲突。

  // you already declared prevState
    const prevState = this.state;
    // change to this.setState(previousState => 
    this.setState(prevState => ({
      companies_checked: {
        ...prevState.companies_checked,
        [target.value]: target.checked
      }
    }));

您实际上没有使用您声明的prevState