reactjs - ReactHook 在不复制键的情况下添加数组状态的数组
问题描述
我正在尝试按单元名称添加数据分组以显示功能
const [allData , setAllData]= useState([{'unit':'' , data:[]}])
useEffect(async () => {
await axios.get(`${BACKEND_URL}/data`).then(res => {
res.data.map(elem => {
setAllData(prev =>[...prev , { 'unit': elem.unitName, 'data': [elem.lessonName] }]);
});
});
}, []);
结果是复制子数组的键,对于我的示例来说,它是“单元”:
[
{
"unit": "unit 1",
"data": [
"LO1"
]
},
{
"unit": "unit 2",
"data": [
"LO2"
]
},
{
"unit": "unit 3",
"data": [
"LO3"
]
},
{
"unit": "unit 1",
"data": [
"LO15"
]
}
]
解决方案
尝试这样,如果发现唯一属性unit
重写data
或将新元素推送到数组
useEffect(async () => {
await axios.get(`${BACKEND_URL}/data`).then(res => {
setAllData((prev) => {
let result = [...prev];
res.data.forEach(({ unitName: unit, lessonName }) => {
const index = result.findIndex((elem) => elem.unit === unit);
if (index >= 0) {
result[index].data = [...result[index].data, lessonName]
} else {
result.push({unit, data: [lessonName]});
}
});
return result;
});
});
}, []);
推荐阅读
- c - 如果我在分叉之前在进程上注册了自定义信号处理程序,后续子进程是否也会注册自定义信号处理程序?
- machine-learning - 使用带注释的文档创建注释任务
- bash - 如何使用 `$@` 将链式命令作为单个参数执行?
- java - 当我尝试生成签名的 apk 时出现错误
- powershell - 从批处理文件运行 Powershell 命令以重命名网络驱动器
- python - 在正则表达式中仅选择特定数字
- sublimetext3 - 如何使用 emacs pro Essentials 插件进行单词跳转和单词删除的行为就像常规的 sublime 单词跳转和删除一样
- html - ng服务一次时如何防止自动重新加载页面?
- python - 使用 ssl 在 Freebsd 11 上安装 Python 3.7
- java - `flux`/`mono`、RabbitMQ、AkkaStream 在微服务世界的大局中是如何工作的?