javascript - 如何在react中删除数组中的元素?

标签 javascript arrays reactjs splice


我有两个函数,其中一个在数组中添加一项,另一个使用 React JS(钩子(Hook))从该数组中删除一项。[两者都是单击事件的处理程序]。
我所拥有的工作不正确。
“id”来自“contact.length”,我用“contacts.splice(id, 1)”删除了它。
我不知道为什么会出现这个问题。
它不会删除将被点击的内容,而是随机删除的内容。

function handleAddRecord(nameValue, phoneValue) {
        setContacts([...contacts , {
            id : contacts.length,
            name : nameValue,
            phone : phoneValue
        }])
    }
    

    function handleDelete(id) {
        console.log("manager", id);
        const newContacts =  contacts.splice([id],1);
        setContacts([...newContacts]);
    }

最佳答案

实现的问题之一是 id 生成,在删除和添加元素时保持数组长度可能会导致出现问题,在某些情况下,多个项目可能具有相同的 id。

最广泛使用的生成器之一是uuid https://www.npmjs.com/package/uuid

使用

const uuid = require("uuid");
uuid.v4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

现在在您的实现中使用它

添加操作:

const handleAddRecord = (nameValue, phoneValue) => {
  const newRecord = {
    id: uuid.v4(),  // This should be unique at all times
    name: nameValue,
    phone: phoneValue,
  };
  setContacts([...contacts, newRecord]);
};

删除操作:

使用过滤器而不是拼接,因为对于拼接,您需要找到具有id的元素的索引。但使用 Filter 只需一行即可完成

const handleDelete = (id) => {
  setContacts(contacts.filter(item => item.id !== id));
};

关于javascript - 如何在react中删除数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67979861/

相关文章:

ios - Objective-C:Plist 不加载

javascript - 从对象数组中删除除最后一个相似键之外的所有键

ios - 如果使用 npm 安装,则在 NativeModules 中找不到 react native 模块

javascript - 如何使用 Reactjs 中的 fetch() 获取的 JSON 数据填充 Bootstrap 网格?

reactjs - localStorage 正在保存我的数据,但在刷新后重置并清空它

javascript - Jquery 事件在任何情况下都不会触发

javascript - 统一 iframe 内呈现的独立页面的路由 Urls

javascript - 大规模 jQuery 选择器缓存

javascript - 如何在 React JS 中像 AngularJS 一样对数组进行排序

php - 将数组中的 $_POST 数据直接插入 MySQL 语句有多安全?