简体   繁体   English

动态添加和删除输入并更新嵌套数组

[英]Dynamically add and remove inputs and update nested array

How to add new input fields dynamically to object in nested array in react js when user clicks on plus sign?当用户单击加号时,如何在反应 js 的嵌套数组中动态添加新输入字段到 object? dynamically add and remove inputs动态添加和删除输入

I want to add and delete propositionTimes dynamically in the handlepropositionTimeAddClick and handlepropositionTimeRemoveClick methods I shared below.我想在下面分享的 handlepropositionTimeAddClick 和 handlepropositionTimeRemoveClick 方法中动态添加和删除 propositionTimes。 How can I do that?我怎样才能做到这一点? And I want to do the same with propositionResponseTimes and analyzers.我想对 propositionResponseTimes 和分析器做同样的事情。

const [issue, setIssue] = useState({
    
    firstResponseDuration: "",
    firstResponseOvertime: "",
    solutionDuration: "",
    solutionOvertime: "",
    propositionTimes: [{
     
      propositionTime: ""
    }],
    propositionResponseTimes: [{  propositionResponseTime: "" }],
    analyzers: [{  analyzerName: "", analyzerHuaweiId: "" }],
  });

  const { firstResponseDuration, firstResponseOvertime,solutionDuration, solutionOvertime, propositionTimes, propositionResponseTimes, analyzers } = issue;
.
.
.

 // handle click event of the Remove button
  const handlepropositionTimeRemoveClick = index => {
  
  };

  // handle click event of the Add button
  const handlepropositionTimeAddClick = (i) => {
   
  };
.
.
.
   {
            issue.propositionTimes.map((item, i) => {
              return (
                <div key={i} className="form-group" >
                  <label>
                    Proposition Time
                  </label>
                  <TextField
                    type="datetime-local"
                    placeholder="Enter propositionTime"
                    name="propositionTime"
                    format="dd-MM-yyyy HH:mm"
                    value={item.propositionTime}
                    onChange={e => onInputPropositionTimes(e, i)}
                  />

                  <div>
                    {issue.propositionTimes.length !== 1 && <button
                      className="mr10"
                      onClick={() => handlepropositionTimeRemoveClick(i)}>Remove</button>}
                    {issue.propositionTimes.length - 1 === i && <button onClick={handlepropositionTimeAddClick(i)}>Add</button>}
                  </div>


                </div>
              )
            })
          }

  // handle click event of the Remove button
  const handlepropositionTimeRemoveClick = index => {
    const issueObj = {...issue};
    const filteredIssue = issue.propositionTimes.filter((item, ind) => ind !== index);
    issueObj.propositionTimes = filteredIssue;
    setIssue(issueObj);
  };

  // handle click event of the Add button
  const handlepropositionTimeAddClick = (i) => {
    const issueObj = {...issue};    
    const newObj = {
      propositionTime: ""   // Code to add new propositionTime
    }
    issueObj.propositionTimes.push(newObj)
    setIssue(issueObj);
  };

Also in your handlepropositionTimeAddClick function, don't call it directly.同样在你的handlepropositionTimeAddClick function,不要直接调用。 Just pass the reference只需传递参考

{issue.propositionTimes.length - 1 === i && <button onClick={() => handlepropositionTimeAddClick(i)}>Add</button>}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM