Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量设置为空数组_Javascript_Arrays_Reactjs_Typescript_Jsx - Fatal编程技术网

Javascript 如何将变量设置为空数组

Javascript 如何将变量设置为空数组,javascript,arrays,reactjs,typescript,jsx,Javascript,Arrays,Reactjs,Typescript,Jsx,我试图编写一个函数,从名为selectedItems的数组中删除所有元素 看起来是这样的: const selectNone = (e: any) => { let selectedItemsCopy = selectedItems; selectedItemsCopy = [] setState( { ...state, areAllSelected: false, isChecked: fals

我试图编写一个函数,从名为
selectedItems
的数组中删除所有元素

看起来是这样的:

  const selectNone = (e: any) => {

    let selectedItemsCopy = selectedItems;
    selectedItemsCopy = []

    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: selectedItemsCopy
      }
    );
  }

但在setState中,selectedItems不会更新为数组的空副本。我做错了什么?

你的问题是,你实际上是在变异状态,这在React中基本上是被禁止的。在这种情况下,求解非常简单,只需将
[]
直接放在
设置状态
中,不带任何变量:

  const selectNone = (e: any) => {
    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: []
      }
    );
  }
用于创建数组副本的方法实际上并不复制数组,而是创建对原始数组的引用(JS就是这样工作的)。为了制作正确的副本(例如,为了能够进行修改,而不仅仅是清除数组),应该使用
array.from()

这里有一个例子

  const selectNone = (e: any) => {

    let selectedItemsCopy = Array.from(selectedItems);
    selectedItemsCopy[x] = changedValue;

    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: selectedItemsCopy
      }
    );
  }

你的问题是,你实际上是在变异状态,这在React中基本上是禁止的。在这种情况下,求解非常简单,只需将
[]
直接放在
设置状态
中,不带任何变量:

  const selectNone = (e: any) => {
    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: []
      }
    );
  }
用于创建数组副本的方法实际上并不复制数组,而是创建对原始数组的引用(JS就是这样工作的)。为了制作正确的副本(例如,为了能够进行修改,而不仅仅是清除数组),应该使用
array.from()

这里有一个例子

  const selectNone = (e: any) => {

    let selectedItemsCopy = Array.from(selectedItems);
    selectedItemsCopy[x] = changedValue;

    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: selectedItemsCopy
      }
    );
  }

[]
是我最初拥有的,但它也不起作用@helloWorld那么你的组件中肯定有其他地方出错了,你能提供更多的组件吗?
[]
是我最初使用的,但也不起作用@helloWorld那么您的组件中的其他地方一定有错误,您能提供更多的组件吗?