【问题标题】:How to update to an array if element already exists如果元素已存在,如何更新到数组
【发布时间】:2021-04-21 16:54:27
【问题描述】:

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

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

我想生成这样的输出

[{
  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]);
    }

【问题讨论】:

    标签: arrays react-native ecmascript-6 setstate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2016-01-02
      • 2020-10-25
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多