You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Reactjs动态生成输入框时各输入框值逐次减1直至1的实现问题

核心修改点

  • 提取初始值为公共常量,支持自定义调整
  • 重写新增行逻辑:每次新增前先校验当前数值是否已到最低值1,未到则将所有现有输入框数值减1,再追加同等数值的新输入框
  • 避免对象引用复用问题,每次操作都生成全新的行对象

完整可运行代码

import { useState } from "react";

// 初始数值,可按需修改
const INITIAL_VALUE = 4;
// 最低可减到的数值
const MIN_VALUE = 1;

function Row({ onChange, onRemove, nombre }) {
  return (
    <div>
      <input
        value={nombre}
        onChange={e => onChange("nombre", e.target.value)}
        placeholder="Decrementar"
      />
      <button onClick={onRemove}>删除</button>
    </div>
  );
}

export default function Pruebas() {
  // 初始行的数值为上面定义的初始值
  const [rows, setRows] = useState([{ nombre: INITIAL_VALUE }]);
  
  const handleOnChange = (index, name, value) => {
    const copyRows = [...rows];
    copyRows[index] = {
      ...copyRows[index],
      [name]: value
    };
    setRows(copyRows);
  };

  const handleOnAdd = () => {
    // 先判断当前数值已经到最低值,就不继续新增
    if (rows[0].nombre <= MIN_VALUE) return;
    // 所有现有行数值减1
    const updatedRows = rows.map(row => ({
      ...row,
      nombre: row.nombre - 1
    }));
    // 追加新的行,数值和减后的值一致
    updatedRows.push({ nombre: updatedRows[0].nombre });
    setRows(updatedRows);
  };

  const handleOnRemove = index => {
    const copyRows = [...rows];
    copyRows.splice(index, 1);
    // 如果需要删除行时所有数值回升,可以放开下面注释
    // const increasedRows = copyRows.map(row => ({
    //   ...row,
    //   nombre: Math.min(row.nombre + 1, INITIAL_VALUE)
    // }));
    // setRows(increasedRows);
    
    // 不需要回升就用下面这句
    setRows(copyRows);
  };

  return (
    <div className="App">
      {rows.map((row, index) => (
        <Row
          {...row}
          onChange={(name, value) => handleOnChange(index, name, value)}
          onRemove={() => handleOnRemove(index)}
          key={index}
        />
      ))}
      <button onClick={handleOnAdd}>新增输入框</button>
    </div>
  );
}

可选功能说明

如果需要实现删除输入框时,所有剩余输入框数值加1(最多回到初始值),可以把handleOnRemove里的注释代码放开,替换原有赋值逻辑即可。

内容的提问来源于stack exchange,提问作者Giovanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:36:01