【发布时间】:2021-06-04 21:13:03
【问题描述】:
如何在使用 TS 时将项目附加到对象数组的状态(React)?
这是我的代码:
export type AppState = {
tickets?: Ticket[],
}
export type Ticket = {
id: string,
title: string;
}
export type ApiC = {
getTickets: (order:string, page:number) => Promise<Ticket[]>;
}
export class App extends React.PureComponent<{}, AppState> {
state: AppState = {
}
fetchNewData = async () => {
return await api.getTickets(this.state.currentOrder, this.state.page)
}
handleLoadMore = () => {
let addData:Promise<Ticket[]> = this.fetchNewData()
if (addData)
this.setState({
tickets: [...this.state.tickets, addData]
})
}
我不断收到此错误:
键入'票[] | undefined' 不是数组类型。
我试过了:
let addData:Ticket[] = this.fetchNewData()
还有我得到的错误:
类型“Promise
”缺少类型中的以下属性 'Ticket[]':长度、pop、push、concat 等 28 个。输入'票[] | undefined' 不是数组类型。
我尝试用各种变体写它,但没有运气。
此行均指向错误:
> 144 | tickets: [...this.state.tickets, addData]
| ^
【问题讨论】:
-
如果
this.state.tickets是未定义,你想发生什么?编译器告诉你正确的事情:现在,你的代码在这种情况下不起作用。 -
hmmm 如果它未定义 - 所以我想用 api 请求获取的新数据填充它.. 我猜。我应该在流程的哪一部分以及如何做到这一点? @jonrsharpe
-
好吧,你目前在哪里依赖它作为一个数组?你需要确保它 is 到那时,或者处理它不是。它应该ever真的是未定义的吗?您还需要正确处理您的承诺;正如编译器告诉你的那样,你不能单方面决定一个函数返回一个值的承诺,而是返回值本身。
-
if (this.state.tickets) {...}?我不确定我是否理解你所说的关于承诺的事情@jonrsharpe
标签: javascript reactjs typescript react-state react-typescript