如果元素已经存在,如何更新到数组

How to update to an array if element already exists

我正在制作一个 React-Native 应用程序。感谢大家的帮助,除了切换 YES 和 NO 之外,我可以以某种方式完成这项工作。一旦用户点击了一个按钮,我只想检查点击的项目数据是否已经存在于状态中,如果是的话我想更新它。如果不存在,则应将其作为新项目添加到状态。

我已经编写了上述逻辑,我的代码可以运行,但没有返回正确的输出,元素没有正确地添加或更新到状态数组。我该如何修复此代码?

我想生成这样的输出

[{
  chelistid:231,
  validiary : "YES",
  remark : "Hello"
},{
  chelistid:232,
  validiary : "NO",
  remark : "asddddd"
}]

我的代码

const [reqData, setReqData] = useState([]);

//Modify yes clicked
    const yesClicked = (element) => {
        let req = {
            "chelistid": element.chelistid,
            "validiary": "Yes",
            "remark": element.remark
        }
        createCheckList(req);
    }

    //Modify no clicked
    const noClicked = (element) => {
        let req = {
            "chelistid": element.chelistid,
            "validiary": "No",
            "remark": element.remark
        }
        createCheckList(req);
    }

    const createCheckList = (data) => {
        const index = reqData.findIndex(x => x.chelistid === data.chelistid)
        var modifiedArray = reqData
        if (index !== -1) {
            //Remove the element from the array
            modifiedArray.splice(index, 1);
        }
        setReqData([modifiedArray, data]);
    }

问题是您似乎没有展开数组来附加数据元素。 [modifiedArray, data] 你在做什么,你正在创建一个数组,其中包含一个数组和类似 [[modified array content here], data] 的数据。但实际上,您想改为附加到修改后的数组。为此,您需要使用称为扩展语法的 ... 来扩展修改后的数组。 (Learn here) 因此,您的代码如下所示:

        setReqData([...modifiedArray, data]);