从 React JSX 功能组件中的数组中删除值时状态不更新

State not updating on removing value from array in React JSX funcntional component

通过复选框选择将值添加到数组中,这工作正常并更新状态,但是当我从数组中删除值时,状态没有更新,但数组正在修改

数组

  const [selectedKeys, setSelectedKeys] = React.useState([]);

事件

 if (event.target.checked) {
               //adding values to array
      setSelectedKeys([...selectedKeys, event.target.value]);
    } else {
      var index = selectedKeys.indexOf(event.target.value);
      if (index >= -1) {
             //Removing values from array
        selectedKeys.splice(index, 1);
      }
      setSelectedKeys(selectedKeys);
    }

splice 方法只是改变现有的数组实例,React 避免重新渲染数组,认为它是同一个数组(React 使用引用相等)。您需要在删除项目后创建一个新数组。

以下任何一个都可以

使用扩展运算符创建一个新数组。

if (event.target.checked) {
    //adding values to array
    setSelectedKeys([...selectedKeys, event.target.value]);
} else {
    var index = selectedKeys.indexOf(event.target.value);
    if (index >= -1) {
        //Removing values from array
        selectedKeys.splice(index, 1);
    }
    setSelectedKeys([...selectedKeys]);
}

过滤输出新数组的数组

if (event.target.checked) {
    //adding values to array
    setSelectedKeys([...selectedKeys, event.target.value]);
} else {
    var index = selectedKeys.indexOf(event.target.value);
    if (index >= -1) {
        //Removing values from array and set the new array
        setSelectedKeys(
            selectedKeys.filter((item, itemIndex) => itemIndex !== index)
        );
    }
}