javascript - 如何在 React 中使用数据添加动态字段(Hooks)

标签 javascript reactjs jsx

我有这个布局

enter image description here

期望的行为

一开始只有一个输入。第一。而且它是空的。当我在其中输入内容并在创建的输入下按“ADD +”新输入时,它被禁用,并且它具有我输入的第一个输入的值。然后第一个输入被清除,它再次为空。我真的不知道该怎么做。

<小时/> <小时/>

这是我目前拥有的代码。

const FilterListInput = ({ data }) => {
  const [comp, setComp] = useState('');
  const [rows, setRows] = useState([[]]);

  console.log(rows);

  const handleChange = (e, index) => {
    rows[index] = e.target.value;
    setRows(rows);
  };

  return (
    <>
      <div className="filter__form__elements__element">
        <label htmlFor={data.name}>{data.labelName}</label>
        <For
          of={rows}
          render={(item, index) => (
            <>
              <Input
                name={item.name}
                placeholder={data.placeholder}
                onChange={(e) => handleChange(e, index)}
              />
            </>
          )}
        />
      </div>
      <Button title="ADD +" type="secondary" onClick={() => setRows([...rows, comp])} />
    </>
  );
};

我被困在这里,不知道下一步该去哪里。目前,当我创建新输入时,我可以在其中键入内容,并且第一个输入中的数据会留在其中,这是我不想要的。另外,我希望所有内容都保存在 rows Hook 中。

我并不是要求完整的代码。只是一些指导方针。

提前谢谢

最佳答案

据我了解您想要的行为 -> 1. 您想要从一个空输入开始,并且当按下 + 按钮时,您想要将一个新的空输入添加到列表的开头。 2. 除第一个输入外的所有输入均应禁用。

我认为您不需要比较状态,只需要行状态。 行状态应该是一维数组(不是二维)

  • state 应该用一个空字符串初始化 const [rows,setRows] = useState([''])
  • 渲染输入时,如果索引> 0,则应禁用输入。
  • 当按下+按钮时,您需要在开头添加一个新行 setRows['',...行]
  • 在你的handleChange函数上只需确保你正在替换 数组,以便组件将重新渲染。类似的东西

    const handleChange = (e, 索引) => { const newRows = [...行]; newRows[index] = e.target.value; setRows(newRows); };

希望对你有帮助

关于javascript - 如何在 React 中使用数据添加动态字段(Hooks),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528926/

相关文章:

javascript - 如何使用webpack输出的变量?

javascript - Material UI 自动完成标签动画不起作用

javascript - 如果对象在另一个数组中具有匹配值,则 react 更新对象数组

javascript - React map 内 JSX 元素的展开操作

javascript - 有条件地分配对象值?

javascript - Javascript 中的内容偏移量

javascript - onStateChange 用新元素替换类元素 youtube chromeless

javascript - AngularJS 通过 $compile 获取动态内容的范围未附加到 Controller 范围

javascript - jsx中如何写if语句来判断是否显示某个属性

javascript - 删除成功后从表中删除行吗?