reactjs - 如何使用 React Hooks 更改某个对象中的某个属性?
问题描述
我尝试将对象更新为某个属性,但在新渲染之后,我总是收到usePl
不是地图函数的错误消息。例如,我想更改对象 2 中的图像属性。
const pl = [
{
id: 1,
bezeichnung: 'fit4Assembly Woche 1 -3',
erstellungsDatum: '28.07.2020',
ersteller: 'Max Maier',
aufgaben: ['Aufgabe 1', 'Aufgabe 2', 'Aufgabe 3'],
gruppe: 'Gruppe 1',
bild: ''
},
{
id: 2,
bezeichnung: 'fit4Assembly Woche 1 -3',
erstellungsDatum: '28.07.2020',
ersteller: 'Max Maier',
aufgaben: ['Aufgabe 1', 'Aufgabe 2', 'Aufgabe 3'],
gruppe: 'Gruppe 2',
bild: ''
}
];
const [usePl, setUl] = React.useState(pl);
async function handleInputChangeBild(event, id) {
[...]
let reader = new FileReader();
reader.onload = (e) => {
setUl((prevState) => ({
...prevState,
[id]: e.target.result //For examble the ID is 2
}));
};
[...]
}
解决方案
您可以映射先前的状态数组(在您的示例中),并使用预期的 ID 更新元素的属性,仅通过在每次迭代中返回自身来保持其他元素不变
async function handleInputChangeBild(event, id) {
[...]
let reader = new FileReader();
reader.onload = (e) => {
setUl((prevState) => prevState.map(el => {
if (el.id === id) {
return {
...el,
'your-expected-attribute': e.target.result
}
} else {
return el
}
}));
};
[...]
}
推荐阅读
- docker - 运行 docker run 命令时如何在 docker 文件中动态传递 ENV 值?
- node.js - 如何从使用 reactjs 的输入插入的 mongodb 数据库中获取全文格式
- r - 使用 reticulate::use_virtualenv 加载包失败
- kubernetes - 将 traefik 用作 DaemonSet 还是部署?
- java - 使用枚举字段验证 POJO
- javascript - React Native ScrollView 高度问题
- sql - SQL 查找给定会话中的时间差
- android - 如何将启动画面添加到已完成的游戏中?
- c# - 不能“美化”SVG
- c++ - 如何读取文件以制作类的对象?