使用 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[]>' 缺少类型 'Ticket[]' 中的以下属性:length、pop、push、concat 和 28 个其他属性。输入'票[] | undefined' 不是数组类型。
我试着用各种变体来写它,但没有运气。
此行中的两个指向错误:
> 144 | tickets: [...this.state.tickets, addData]
| ^
您的代码中几乎没有问题,您可以解决这些问题:
export type AppState = {
tickets: Ticket[] // remove the ?
// ...
}
constructor(props) {
super(props)
this.state = {
tickets: [],
// ...
}
}
addData
是数组Ticket
,你需要handleLoadMore
的功能async
使用await
上this.fetchNewData
得到通过它返回的数据:handleLoadMore = async () => {
let addData = await this.fetchNewData()
if (addData)
this.setState({
tickets: [...this.state.tickets, ...addData],
})
// Or
this.setState({
tickets: this.state.tickets.concat(addData),
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句