javascript - .map 是编辑我的 useState 的正确方法吗?
问题描述
我正在尝试使用文本框和 useState 制作一个简单的表格/网格,如电子表格。我正在使用 .map 加载它们,然后我只想编辑 eachc 一个(依次编辑状态)到目前为止
import React, { useState } from "react";
import "./style.css";
const App = () => {
const [data, setData] = useState([
{ firstName: "Elon", lastName: "Musk" },
{
firstName: "Jeff",
lastName: "Bezos",
additionDetails: [{ worth: "Lots" }, { company: "Amazon" }],
},
]);
const handleChange = (e) => {
e.preventDefault()
setData((prevState) => ({
...prevState,
[e.target.name]: e.target.value,
}));
};
return (
<>
{data.map((x, i) => {
return [
<input
type="text"
name="firstName"
value={x.firstName}
onChange={handleChange}
/>,
<input
type="text"
name="lastName"
value={x.lastName}
onChange={handleChange}
/>,
<br></br>,
];
})}
</>
);
};
export default App;
解决方案
删除 handleChange 函数并用匿名函数替换 onChange 事件,该函数将复制新变量中的数据值,编辑该新变量,然后使用 'setData()' 将数据值更改为新变量的值,如下所示:
data.map(x, i) => {
return (
<input type="text" name="firstName" value={x.firstName} onChange={function(e) {
const newData = data;
newData[i][e.target.name] = e.target.value;
setData(newData);
}
推荐阅读
- docker - 由于网络问题,Docker 无法使用 VPN
- arrays - 数组没有改变,第三个 scanf 不允许我输入任何内容
- python-3.x - 根据也具有特殊字符的部分字符串值过滤数据框
- regex - 用于检测单个字符后面没有相同字符的正则表达式
- c# - 如何将字符串转换为数字并执行 if else 语句?
- c++ - [leetcode 5] 在我的最长回文子串问题的解决方案中找不到问题所在
- javascript - 未捕获的类型错误:无法读取 HTMLSpanElement.menuBtn.onclick 处未定义的属性“添加”
- mongodb - 获取 MongoDB 中存在字段的记录数
- html - 像 img 中的文本一样使用 data-*
- javascript - Svelte:将 noscroll 类名从组件添加到正文