gpt4 book ai didi

javascript - React setState 在 .map() 中被覆盖

转载 作者:行者123 更新时间:2023-12-02 22:35:53 24 4
gpt4 key购买 nike

我正在尝试从多个端点动态获取数据并使用 React hooks 保存到本地状态。当我记录以下内容时,refDataArr 中的每个项目的状态似乎都被覆盖。

数据正在正确解析和存储,但我希望 refData 状态包含所有四个结果,并且不被覆盖。

  useEffect(() => {
const refDataArr = [
{
url: "users",
field: "user"
},
{
url: "products",
field: "product"
},
{
url: "roles",
field: "role"
},
{
url: "locations",
field: "location"
}
]

const fetchRefData = () => {
console.log('Fetching reference data...');
try {
refDataArr.map(async (o, index) => {
let url = o.url
let field = o.field
const res = await axios.get(`http://.../${url}/ `);
const data = res.data.data

let resArr = Object.values(data).map((item, index) => {
return {
key: item._key,
value: item[field]
}
});
setRefData({
...refData,
[field]: resArr,
})
})
} catch (err) {
console.log(err);
}
}
fetchRefData();
}, []);

结果日志示例(其他日志显示用户、 Angular 色等。它们正在被覆盖):

refData = {
user: [
{key: 1, value: "A"},
{key: 2, value: "B"}
]
}

refData = {
location: [
{key: 1, value: "A"},
{key: 2, value: "B"}
]
}

...etc

期望的结果:

refData = {
user: [
{key: 1, value: "A"},
{key: 2, value: "B"}
],
product: [
{key: 1, value: "A"},
{key: 2, value: "B"}
],
role: [
{key: 1, value: "A"},
{key: 2, value: "B"}
],
location: [
{key: 1, value: "A"},
{key: 2, value: "B"}
]
}

最佳答案

您应该构建所需的对象,然后在完全构建后使用您需要的setRefData

useEffect(() => {
const refDataArr = [
{
url: "users",
field: "user"
},
{
url: "products",
field: "product"
},
{
url: "roles",
field: "role"
},
{
url: "locations",
field: "location"
}
]
let newData = {};
const fetchRefData = () => {
console.log('Fetching reference data...');
try {
refDataArr.map(async (o, index) => {
let url = o.url
let field = o.field
const res = await axios.get(`http://.../${url}/ `);
const data = res.data.data

let resArr = Object.values(data).map((item, index) => {
return {
key: item._key,
value: item[field]
}
});
newData = {...newData, [field]: [...resArr]}
})
setRefData({
...refData,
...newData,
})
} catch (err) {
console.log(err);
}
}
fetchRefData();
}, []);

关于javascript - React setState 在 .map() 中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58738653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com