【发布时间】:2020-01-22 02:47:02
【问题描述】:
我正在测试 React-table 服务器端数据,以呈现从 Web api 获取的大量数据,而不会导致浏览器崩溃。使用基本的反应表设置,浏览器无法处理如此多的记录(500000)并崩溃(它卡在请求的挂起状态)。
所以我找到了可能对我有帮助的服务器端数据。 我按照文档中的说明进行操作,但打字稿抱怨我在更新状态时尝试使用的数据。
这是我到目前为止所拥有的:
从web api获取数据的方法:
private fetchSales() {
fetch(`http://localhost:50335/api/RK`)
.then(response => response.json())
.then(data =>
this.setState({
sales: data // here I get 500000 items
})
)
}
这个 fetchSales 在 componentDidMount() 中被调用。
然后我在 render() 中有 ReactTable 组件:
render() {
const {
sales,
pages
} = this.state;
return (
<div className = "App" >
<ReactTable
data = {sales}
manual
pages = {pages}
defaultPageSize = {10}
onFetchData = {this._fetchData}
columns = {
[{
Header: "Region",
accessor: "Region"
},
{
Header: "Country",
accessor: "Country"
}]
}
/>
</div>
);
}
在 ReactTable 中调用了一个名为 _fetchData 的函数,该函数如下所示:
private _fetchData(state: any) {
requestData(
state.sales,
state.pageSize,
state.page
).
then(res => {
this.setState({
sales: res.rows, // here typescript complain: "res is of type 'unknown'"
pages: res.pages // here typescript complain: "res is of type 'unknown'"
});
})
}
在 setState 中 res 对象的类型是“未知”,而 typescript 不喜欢它。
requestData 是一个存在于类之外并获取销售额、pageSize 和页面状态的函数:
const requestData = (sales: any, page: number, pageSize: number) => {
return new Promise((resolve, reject) => {
const res = {
rows: sales.slice(pageSize * page, pageSize * page * pageSize),
pages: Math.ceil(sales.length / pageSize)
}
resolve(res);
})
}
该功能与文档中的功能几乎相同,我只删除了过滤和排序,因为我不需要它们。我只需要返回函数的 res 对象。
我几乎忘记了,在构造函数中,我将 this 附加到 _fetchData 方法:this._fetchData = this._fetchData.bind(this);
为什么打字稿抱怨我试图用来设置状态的 res 对象?
最好的问候! 美国
【问题讨论】:
标签: javascript reactjs fetch react-table