Создано простое приложение реакции-администратора, которое извлекает из пользовательского API отдыха. Отображается первая страница (по умолчанию 10 на страницу. Нажмите кнопку Далее, и ничего не происходит (по-прежнему отправляет страницу = 1 в API). Нажмите второй раз, и страница перейдет на страницу 2 (страница = 2), как и ожидалось. Нажмите кнопку в третий раз и возвращается на страницу 1 (страница = 1).
Затем, если вы щелкнете в четвертый раз, он перейдет на страницу 2, затем снова щелкните, перейдет на страницу 3, затем снова щелкните, вернется к страница 1. Это продолжается с этим шаблоном, каждый раунд, продвигаясь на одну страницу дальше, прежде чем вернуться на страницу.
Я могу получить правильные результаты при вызове пользовательского API за пределами приложенияact-admin. Я создал собственный dataProvider для связи с API, и, возможно, есть проблема с функцией getList, но я определенно вижу номер страницы, переданный в эту функцию, и он совпадает с нечетными результатами (страница 1, затем 1, 2, 1 , затем 1, 2, 3, 1 и т. д. c. Пользовательский API ожидает следующую строку запроса для разбивки на страницы:? limit = 10 & page = 1 & orderBy = id & orderDir = AS C
Оригинал учебник act-admin возвращает 10 записей. Когда я устанавливаю ограничение на 5 страниц, кажется, что оно работает нормально (переход на страницу 2 при первом нажатии кнопки «Далее»), но без дополнительных записей его сложно полностью протестировать. Но я предполагаю, что это сработает, поскольку это, безусловно, проблема с моим кодом или API (хотя, как я уже сказал, API работает вне приложения реагирования).
Вот моя функция getList:
const httpClient = (url, options = {}) => {
if (!options.headers) {
options.headers = new Headers({ Accept: 'application/json' });
}
const tokens = localStorage.getItem('tokens');
const objToken = JSON.parse(tokens);
options.user = {
authenticated: true,
token: `Bearer ${objToken.accessToken}`
};
return fetchUtils.fetchJson(url, options);
};
export default {
getList: (resource, params) => {
const { page, perPage } = params.pagination;
const { field, order } = params.sort;
const { q } = params.filter;
// Pagination and sort
let query = `limit=${perPage}&page=${page}&orderBy=${field}&orderDir=${order}`;
// Filter?
let useResource = '';
let useFilter = '';
if (q == null) {
// No filter: Use <resource>/ url
useResource = resource;
} else {
// Filter: Use append url with /find
useResource = `${resource}/find`;
useFilter = q;
console.log('useFilter: ', useFilter)
query += `&searchText=${useFilter}`;
}
const url = `${apiUrl}/${useResource}?${query}`;
return httpClient(url)
.then(({ json }) => ({
data: json.results,
total: json.totalRows,
}));
}, ...
Вот снимок экрана вопроса:
![enter image description here](https://i.stack.imgur.com/mTivK.gif)
РЕДАКТИРОВАТЬ: похоже, правильная строка запроса отправляется, но сразу после первый щелчок на следующей странице (страница = 2), страница = 1 автоматически отправляется снова, возвращаясь на первую страницу. Похоже, это относится и к последующим кликам Next. Спасибо за помощь новичку ie. Но я просто не могу понять, почему выполняются дополнительные звонки, возвращаясь к странице 1.