【发布时间】:2020-05-07 10:35:05
【问题描述】:
您可以在此处查看完整代码: CODESANDBOX LINK
这真的很奇怪。 我有一个输入字段列表,这些字段根据按钮单击动态呈现
const newFields = (index) =>
<div>
<input value={inputs[index].name} onChange={e => handleNameInput(e,index)} />
<input value={inputs[index].age} type="number" onChange={e => handleAgeInput(e,index)} />
<Button onClick={() => setInputArray(inputArray => [...inputArray, newFields(++index)])}>Add</Button>
</div>
我正在尝试存储输入的值并在更改时更新它们。但正如标题中所述,我无法在输入字段中输入,一旦我单击一个字符,输入就会失去焦点。我不知道为什么会这样。
这里是状态和handleInput函数:
let [inputs, setInputs] = useState(Array.apply(null, Array(100)).map(function () { return {
name: '',
age: ''
} }));
const handleNameInput = (e, i) =>{
let tempArr = new Array();
tempArr = [...inputs];
tempArr[i].name = e.target.value;
setInputs([...tempArr]);
}
//handleAgeInput is exactly the same
【问题讨论】:
-
闭包中有一些问题,这是肯定的,但我不明白你是如何使用
inputArray和input的。你能给我解释一下吗?因为,据我了解,在inputArray中您正在保存HTML 元素,而在input中您只是在保存值.. 对吗?这是强制性的吗?因为我很确定你可以通过input数组实现你想要的。我可以给你举个例子 -
我正在使用输入数组动态显示字段,页面开始时显示一组输入字段。然后,如果您单击该按钮,它将添加一组新的输入字段。我想要做的是将每个输入字段中的值存储在输入数组中
-
请查看沙盒链接以查看应用程序,这很容易理解问题然后codesandbox.io/s/laughing-leftpad-27woh?file=/src/App.js
-
我确实查看了沙箱,并且确实了解您想要实现的目标,但我想知道您的某些实现选择是否是故意做出的,因为有更简单的方法来获得您的需求.例如,就像在接受的答案中一样。
-
@Jolly 好吧,我在这里尝试简化程序并提及唯一相关的部分,但我的实际程序有点复杂。这就是为什么您可能会找到更简单的方法来实现相同的目标。但我唯一想了解的是为什么我不能在字段中输入。还是谢谢
标签: reactjs react-hooks