如何从函数返回输入标签?

MayBeNextT1me

我的网页上有一个按钮,每当用户单击该按钮时,我都希望输入标签出现。我之前尝试过这样的事情:

import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [showInput, setShowInput] = useState(false);
  const handleClick = () => setShowInput(true);
  return (
    <div className="App">
      <button onClick={handleClick}>Click me</button>
      {showInput ? <input type="text" /> : ""}
    </div>
  );
}

但这只能工作一次。我希望它在用户单击该按钮时添加一个输入标签。我该怎么做?

优素福

建议您不要将一个对象保持在最初为空的状态下,而不必保持该状态下的输入元素数量。单击按钮添加输入后,可以使用代表新input元素的键值对更新对象

添加一个输入后的状态如下所示:

{ 
   input1: { value: '' }
}

同样,随着添加更多输入,将在状态中添加更多对象。

这将使您的输入元素成为可能,controlled components并使您onChange仅可以使用一个事件处理函数来处理事件。

演示版

let counter = 1;

function App() {
  const [inputs, setInputs] = React.useState({});

  const handleClick = () => {
    const inputName = "input" + counter++;
    const inputObj = { value: "" };

    setInputs({ ...inputs, [inputName]: inputObj });
  };

  const handleChange = (event) => {
    const { name, value } = event.target;
    setInputs({ ...inputs, [name]: { ...inputs[name], value } });
  };

  return (
    <div className="App">
      <button onClick={handleClick}>Add Input</button>

      <div className="inputContainer">
        {Object.keys(inputs).map((inputName) => {
          const { value } = inputs[inputName];
          return (
            <input
              key={inputName}
              name={inputName}
              value={value}
              onChange={handleChange}
              placeholder={inputName}
            />
          );
        })}
      </div>
    </div>
  );
}

ReactDOM.render(<App/>, document.querySelector('#root'));
.App {
  font-family: sans-serif;
  text-align: center;
}

.inputContainer {
  display: flex;
  flex-direction: column;
  max-width: 300px;
  margin: 10px auto;
}

input {
  margin: 5px;
  padding: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从输入字段返回其标签?

如何从闪亮的callModule函数返回输入值

无论输入如何,函数始终返回true

如何返回输入元组包含空集的函数?

如何从第一个输入标签的函数运行第二个输入标签的输入函数

如何在javascript函数内循环输入标签

当没有输入输入时,如何从输入标签中触发一个函数?

PHP函数返回输入

如何在返回列表项的标签中显示函数的结果?

如何在函数的返回命令中输入变量?

如何使用函数输入类型“ typeof A”返回类型“ A”?

如何使用输入字段中的javascript函数返回的值?

输入时如何返回构造函数中的参数

如何使用python返回def函数中的输入

输入对应的变量后,如何使函数返回值?

如何使用输入标签接受用户输入并使用javascript返回值?

函数对任何输入返回 0

c++返回输入函数

如何从函数返回与传递给函数的数量一样多的元素(html 标签)?反应

无论 Python 中的输入如何,返回特定字母出现的索引的函数总是不返回任何内容?

如何让函数的返回类型成为同一接口中另一个函数的输入

打字稿:如何从返回函数的输入参数推断高阶函数中的泛型类型

将函数返回的指针作为其他函数的输入时,如何避免内存泄漏?

如何编写一个基于输入返回“n”个函数列表的函数

如何使用NodeJS Map函数将then()返回对象作为then()函数的输入

如何使用 R 的优化、优化函数等来查找提供特定返回值的函数输入?

跨度标签后如何选择输入标签?

如何更改包含输入标签的标签文本?

如何隐藏或显示输入标签?