Я тестирую данные на стороне сервера React-таблицы, чтобы отобразить огромное количество данных, извлеченных из веб-API, без сбоя браузера.С базовыми настройками таблицы реакции браузер не может обработать такое количество записей (500000) и сбой (он застревает в состоянии ожидания запроса).
Так что я нахожу данные со стороны сервера, которые, возможно, могут мне помочь.Я следовал инструкциям из документации, но машинопись набрала жалобы на данные, которые я пытаюсь использовать при обновлении состояния.
Это то, что у меня есть до сих пор:
Метод извлечения данных из веб-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 ().
Тогда внутри рендера есть компонент 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 имеет тип 'unknown', а машинопись не нравится.
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, который я пытаюсь использовать для установки состояния?
С уважением!Америко