创建了一个简单的react-admin应用程序,它从一个自定义的rest api中提取。第一个页面被显示(默认每页10个。点击 "下一步 "按钮,什么都没有发生(仍然将page=1发送到api)。点击第二次,页面前进到第2页(page=2),正如预期的那样。点击第三次,又回到第1页(page=1)。
然后,如果你点击第四次,就会进入第2页,再点击,进入第3页,再点击,回到第1页。每一轮都以这种模式继续下去,在回到页面之前,再进一步得到一页。
当我在react-admin应用之外调用自定义API时,能够得到正确的结果。我创建了一个自定义的dataProvider来与API进行通信,也许getList函数有问题,但我绝对可以看到传递到这个函数中的页码,而且它与奇数结果一致(第1页,然后是1、2、1,然后是1、2、3、1等。自定义API期望分页的查询字符串如下: ?limit=10&page=1&orderBy=id&orderDir=ASC。
原版的 react-admin 教程返回的是 10 条记录。当我把页面限制设置为5条时,似乎确实可以正常工作(在第一次点击 "下一步 "时前进到第2页),但没有更多的记录,很难完全测试。但我猜测是可以工作的,因为这很可能是我的代码或API的问题(虽然我说过,API在react应用之外工作)。
这是我的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,
}));
}, ...
这是问题的截图
EDIT:看起来是发送了正确的查询字符串,但是在第一次点击Next page(page=2)之后,page=1又自动发送,回到了第一页。以后的Next点击似乎也是如此。谢谢你帮助一个新手。但我就是想不通,为什么返回第1页的时候会有额外的调用。