【发布时间】:2021-05-28 07:21:39
【问题描述】:
这是一个非常简单的应用程序,我为 2 个案例声明了 2 个状态
在案例 1 中,我使用状态 dataArray1 并创建一个输入标签数组。
在情况 2 中,我使用状态 dataArray2 并创建一个数组,其中只包含一个输入标签
现在的问题是,如果情况 1 用户界面按要求运行,但情况 2 中,当我们键入任何内容时输入会失去焦点。我想了解为什么会发生这种情况以及如何解决它...
codeandbox 链接:https://codesandbox.io/s/dreamy-dubinsky-x8t6c?file=/src/App.js
这里是代码...
import { useState } from "react";
import "./styles.css";
export default function App() {
const [dataArray1, setDataArray1] = useState([
"Hello",
"My name is testBot",
"I am a student"
]);
const [dataArray2, setDataArray2] = useState([
"Hello",
"My name is testBot",
"I am a student"
]);
const generateUI1 = (data) => {
console.log(data);
return data.map((e, i) => {
return (
<div key={`type1Key${i}`}>
<input
value={data[i]}
onChange={(e) => {
let newData = [...data];
newData[i] = e.target.value;
setDataArray1(newData);
}}
/>
</div>
);
});
};
const InputComponent = (props) => {
return (
<input
value={props.data[props.i]}
onChange={(e) => {
let newData = [...props.data];
newData[props.i] = e.target.value;
setDataArray2(newData);
}}
// key={`new${props.i}`}
/>
);
};
const generateUI2 = (data) => {
console.log(data);
return data.map((e, i) => {
return (
<div key={`${data[i]}`}>
<InputComponent data={data} i={i} key={`type2Key${i}`} />
</div>
);
});
};
return (
<div className="App">
<div>
<h1>Case 1</h1>
{generateUI1(dataArray1)}
</div>
<div>
<h1>Case 2</h1>
{generateUI2(dataArray2)}
</div>
</div>
);
}
【问题讨论】:
标签: javascript html reactjs input