我有一个函数可以从服务器获取一些数据的数组:
async GetResolutionsAsync(signal: AbortSignal): Promise<BaseReference[]> {
var resp = await fetch(`api/Improvements/GetResolutions`, {
signal: signal
})
if (resp.status >= 400)
throw new Error(`[ImprovementsDbHandler GetResolutionsAsync]: ${await resp.text()}`)
const data = await resp.json() as BaseReference[]
return data
}
我的
BaseReference
类型:
export type BaseReference = {
id: number;
name: string;
}
但是我在
id
之后在
await resp.json()
变量中得到 0 值
(8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {id: 0, name: 'К реализации'}
1: {id: 0, name: 'На доработку'}
2: {id: 0, name: 'На перспективу'}
3: {id: 0, name: 'На рассмотрение ТС1'}
4: {id: 0, name: 'На рассмотрение ТС2'}
5: {id: 0, name: 'На рассмотрение ТС3'}
6: {id: 0, name: 'Отклонено'}
7: {id: 0, name: 'Не выбрано'}
length: 8
但问题是,当我没有将
data
变量作为回报时,一切都会按预期进行。例如:
const data = await resp.json() as BaseReference[]
console.log(data)
return []
控制台日志:
(8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {id: 1, name: 'К реализации'}
1: {id: 2, name: 'На доработку'}
2: {id: 3, name: 'На перспективу'}
3: {id: 4, name: 'На рассмотрение ТС1'}
4: {id: 5, name: 'На рассмотрение ТС2'}
5: {id: 6, name: 'На рассмотрение ТС3'}
6: {id: 7, name: 'Отклонено'}
7: {id: 0, name: 'Не выбрано'}
length: 8
我有很多相同的函数来获取其他数据数组,但它们都返回请求的值,这里可能有什么问题?
正如评论员所说,我想,数据在某种程度上和某个地方正在发生变化,因为我找不到这些变化的可能性,因为我对这个数组所做的唯一事情就是将其设置为用作某些字典的状态。所以现在我正在创建数组的副本以将其放入状态,问题似乎已经解决了:
iHandler.GetResolutionsAsync(controller.signal).then((resolutionsToSet) => {
var newResolutions = JSON.parse(JSON.stringify(resolutionsToSet))
setResolutions(newResolutions);
}).catch((error) => { setLoading(false); errorHandler(error, "[GetResolutionsAsync]") })