为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 onClick 方法删除对象并更新数组

如何使用 onClick 方法删除对象并更新数组

莫回无 2023-06-09 10:59:57
我正在从 skidList 数组创建列表并处理每个 skid 上的复制和删除操作以及单击删除按钮我调用的deleteSkid方法删除该索引处的 skid 并更新列表。但是,它不是删除特定索引处的 skid,而是删除数组列表中的最后一个 skid。const CreateNewTab = () => {  const [skidList, setSkidList] = useState([]);  const [productNameMap, setproductNameMap] = useState({});  useEffect(() => {    let skidList = [];    let newSkid = {};    newSkid["2"] = "0";    newSkid["3"] = "0";    newSkid["4"] = "0";    skidList.push(newSkid);    setSkidList([...skidList]);    let productNameMap = {};    productNameMap["2"] = "PEN";    productNameMap["3"] = "PENCIL";    productNameMap["4"] = "ERASER";    setproductNameMap({ ...productNameMap });  }, []);  const updateProductQuantity = (skid, key, newQuantity, index) => {    console.log("Inside update Skid Quantity Index= " + index);    skid[key] = newQuantity;    let newSkidList = skidList;    newSkidList.splice(index, 1, skid);    console.log(newSkidList);    setSkidList([...newSkidList]);  };  const deleteSkid = (index) => {    console.log(index);    let newSkidList = skidList;    newSkidList.splice(index, 1);    console.log("Skid deleted from: " + newSkidList);    setSkidList([...newSkidList]);  };  const insertSkid = (skid) => {    setSkidList(skidList.concat([{ ...skid }]));  };  return (    <div>      {skidList.flatMap((skid, index) => (        <div style={{ marginRight: "0", paddingRight: "0" }}>          <Row style={{ margin: "0", padding: "0" }}>            <Col span={19}>              {Object.keys(skid).map((key) => (                <Row>                  <Col span={16}>                    <h6>{productNameMap[key.toString()]}</h6>                  </Col>                  <Col span={8}>                    <InputNumber                      min={0}                      defaultValue={skid[key]}
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

似乎它与 react 如何回收 dom 或其他东西有关,该项目确实从数组中删除但不知何故该值保留在 dom 中,因为您在输入中使用而不是,进行这个小改动defaultValuevalue会工作

value={skid[key]}

查看完整回答
反对 回复 2023-06-09
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您的实现deleteSkid()很好,但是您将值传递给 asInputNumber所以defaultValue当组件重新渲染时它不会改变。只需将其替换为value,它就可以工作。


<InputNumber

  min={0}

  value={skid[key]}

  rules={[

    {

      required: true,

      message: "Please input quantity!"

    }

  ]}

  onChange={(newQuantity) => {

    updateProductQuantity(skid, key, newQuantity, index);

  }}

/>


查看完整回答
反对 回复 2023-06-09
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信