[英]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.