javascript 如何在react中动态创建输入字段?

b09cbbtk  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(151)

我正在尝试动态创建输入字段。
输入场可以被认为是三维矩阵mat[m][n][2]。
为了再添加一个2D矩阵,在底部有一个按钮,并且为了在每个矩阵中创建更多行,在每个矩阵的末端有一个按钮。

这是我试过的。(忽略css)

const Counter = () => {
  const [info,setInfo] = useState([]);
  const addNewCond = (e) => {
    let matrix = [["",""]];
    setInfo([...info,matrix]);
  }
  const addNewDetailedCond = (index) => (e) => {
    let matrix=info[index];
    matrix.push(["",""]);
    setInfo(matrix);
  }
  
  const deleteCond = (e) => {
    
  }
  
  const deleteDetailedCond = (index) => e => {}
  const handleDetailedCond = (i,j,k) => (e) => {}
  
  
  return (
    <div>
      <form className="form-horizontal form-label-left">
        {
          info.map((mat,i) => (
            <>
              {
                mat.map((rows,j) => (
                  <div className="form-group">
                    <div className="col-md-6 col-sm-6">
                      <select className="form-control" value={info[i][j][0]} onChange={handleDetailedCond(i,j,0)}>
                        <option value="test">Test</option>
                      </select>
                    </div>
                    <div className="col-md-6 col-sm-6">
                      <input className="form-control" value={info[i][j][1]} onChange={handleDetailedCond(i,j,1)}/>
                    </div>
                  </div>
                ))
              }
              {
                mat.length !== 0 ? <button className="btn btn-primary" type="button" onClick={addNewDetailedCond(i)}>Add New Detailed Info</button> : null
              }
            </>
          ))
        }
        <div className="form-group">
          <div className="col-md-6 col-sm-6">
            <button type="button" className="btn btn-primary" onClick={addNewCond}>Add New Condition</button>
          </div>
        </div>
      </form>
    </div>
  )
}

代码笔链接-〉https://codepen.io/anonymous0045/pen/ZEMGLrN
每当我尝试在每个矩阵中添加更多的列表失败,我在特定矩阵中添加更多行时犯了什么错误?请帮助。

yqlxgs2m

yqlxgs2m1#

我认为您需要在以下函数中进行更改,以便为一个条件添加嵌套表单组。

const addNewDetailedCond = (index) => (e) => {
  const newInfo = info.map((mat, i) => {
    if (i === index) {
      return mat.concat([["", ""]]);
    }
    return mat;
  });
  console.log("new matrix => ", newInfo);
  setInfo(newInfo);
};

另外,当你通过循环渲染元素时,你需要添加键。检查控制台中的警告,它们很有帮助!
编辑版本:https://codepen.io/anonymous0045/pen/ZEMGLrN?editors=0010
如果成功了告诉我!

相关问题