[英]Spread operator on array of objects returns empty array
TL;DR:如果值意外消失或未定義或為空等,請查看異步函數。
有一些關於傳播運算符返回“未定義”的問題,但在我的情況下,我完全沒有得到任何信息。
這是過程
[listof_objA, listof_objB]
.then(([listof_objA, listof_objB])=> { ...so on
dispatch(setListA(listof_objA))
像someAsyncFunc().then(([listof_objA, listof_objB])=> {
dispatch(setListA(listof_objA))
dispatch(setListB(listof_objB))
})
console.log(action.payload)
,正確顯示獲取到的listof_objA
case Types.SET_LISTA: {
console.log(action.payload)
return {
...state,
listof_objA: action.payload
}
}
case Types.SET_LISTA: {
console.log(action.payload)
return {
...state,
listof_objA: [...action.payload]
}
}
[]
。 action.payload
仍然正確顯示獲得的listof_objA
。JSON.parse(JSON.stringify(action.payload))
, const newList = [...action.payload]
Array(0)
但當下拉時它顯示Array(13) [{...},{...}, ... , {...}]
。就是這個。 我找不到任何解決方案。 我不知道為什么會這樣。 而且似乎只發生在我身上。 請幫忙。 如果您需要更多信息,請發表評論。 我在一家公司工作,所以我不能提供所有信息。 但我會盡力的。 謝謝你。
我猜你在someAsyncFunc
中使用了一個 Promise ,如果是這樣,你得到一個空數組的原因是因為你可能沒有正確解析你的 Promise 鏈。
正確的 Promise 鏈應如下所示:
async function someAsyncFunc() {
return await fetch('ENDPOINT')
.then(response => {
return response.ok
? response.json()
: Promise.reject(Error('Unsuccessful response'));
})
.then(([listof_objA, listof_objB]) => {
dispatch(setListA(listof_objA));
dispatch(setListB(listof_objB));
});
}
為了讀取響應 JSON 的正文。 您需要調用 response.json() 方法。 json() 方法讀取響應的完整正文並將文本解析為 JSON。 由於這是另一個異步操作,它本身返回一個承諾。
希望它有幫助
@jank 回答我希望能解決你的問題,但你可能想看看redux-api-middleware作為一種更簡單的 RPC 調用方式,沒有所有的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.