我有这个简单的函数来更新 React 中的状态。 它从 URLs 数组中获取一个简单的 URL,然后获取额外的数据并创建 newItem 它应该更新另一个状态,该状态也是这个新对象的数组。 但它会互相覆盖第一项。 为什么会这样?
{
"Entity":"MP3",
"Body":"{"name":"COKE","category":"CANDIES","sales":123.0}"
}
答案 0 :(得分:1)
SetDisplay
是一个异步函数。尝试在 for 循环之外调用它。迭代时创建一个单独的数组,并在 for 循环后将该数组附加到先前维护的 display
状态。
separateArray = []
for (const item of urls) {
const url = item.url
const ID = url.slice((url.search("=",0) + 1), url.length)
const YtResponse = GetByIdYouTube(ID)
const data = await YtResponse
const date = item.date
const newItem = {data, url, date}
separateArray.push(newItem)
}
setDisplay([...display, ...separateArray])
答案 1 :(得分:0)
你需要给出之前的状态:
setDisplay({ (display) => { display.concat(newItem) }})
或者也有这个解决方案:
const t = display.concat(newItem)
setDisplay(t)
答案 2 :(得分:0)
这应该按预期工作
for (const item of urls) {
const url = item.url;
const ID = url.slice(url.search("=", 0) + 1, url.length);
const YtResponse = GetByIdYouTube(ID);
const data = await YtResponse;
const date = item.date;
const newItem = { data, url, date };
let temp = [...display]; // Make a copy of array then update state
temp.push(newItem);
setDisplay(temp);
}
答案 3 :(得分:0)
我找到了一半的解决方案:) 这个函数应该能够添加一个或多个值。 现在使用下面的代码,它可以在从初始状态(URL 状态)一次读取多个值时起作用 但是当我通过添加一个值来更新 Urls 状态并且 useEffect 会触发这个函数 它失败了,似乎数据结构不再是数组
{{1}}