首页 > 解决方案 > 让 React-redux 从分页后端获取所有数据

问题描述

我有一个我一直在为我的公司开发的应用程序,用于将数据从旧系统转换为新系统。它有一个 Django Rest Framework 后端和一个 react / redux 驱动的前端。从功能上讲,该程序执行我想要的操作,但它不想提取所有数据。后端 API 分页到 200 页大小。前端有自己的分页,因此它不会一次显示所有约 40k 的结果。但是,我确实希望它将所有这些结果加载到道具中,以便可以搜索他们想要的确切项目。这可能不是解决这个问题的最佳方法,但这是我的第一个全栈应用程序,所以它现在就可以了。

我已经尝试从后端删除页面大小,因为无论如何我的用户都不会看到它。在较小的数据集上,这很好用。但是,一旦我开始从更大的数据集中提取数据,它就会抱怨查询参数由于某种原因与预期不匹配,除非我分页。

这是我认为相关的代码。如果您需要更多,请告诉我。

前端:

//Get request sent out to the back end.
//Returns 200 results to my state right now
//Should be returning 40k results total and paginating 
export const getQuotes = () => dispatch => {
  axios
    .get("http://localhost:8000/api/quotes/")
    .then(res => {
      dispatch({
        type: GET_QUOTES,
        payload: res.data.data
      });
    })
    .catch(err => console.log(err));
};


后端:

#this is just the viewset used. I filter and pre-fetch some data. 
#currently on the backend I can see 200 pages of 200 results each
#as well as specify an ID to get a single detailed view
class QuoteinfoApiViewset(viewsets.ModelViewSet):
    queryset = Quoteinfo.objects.all()
    serializer_class = QuoteinfoSerializer


    def get_queryset(self):
        self.queryset =  Quoteinfo.objects.prefetch_related('lines', 'lines__lineasm', 'lines__linemat').filter(quotedate__gte= datetime(2017,1, 1))
        return self.queryset

用于休息框架的 Django 设置

#right here is where I set the page size
#somewhere between here and the front end
#it mistakes this for me only wanting 200 results total
#even though the backend returns the proper results
REST_FRAMEWORK = {
   'PAGE_SIZE': 200,  

  'EXCEPTION_HANDLER': 
    'rest_framework_json_api.exceptions.exception_handler',

  'DEFAULT_PAGINATION_CLASS':    'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
    'rest_framework_json_api.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser'
  ),
'DEFAULT_RENDERER_CLASSES': (
    'rest_framework_json_api.renderers.JSONRenderer',
    'rest_framework.renderers.BrowsableAPIRenderer',
   ),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
'DEFAULT_FILTER_BACKENDS': (
     'rest_framework.filters.OrderingFilter',
    ),
'ORDERING_PARAM': 'sort',

   'TEST_REQUEST_RENDERER_CLASSES': (
     'rest_framework_json_api.renderers.JSONRenderer',
    ),

   'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}

本质上,我的后端页面大小为 200。在我的后端,我有 200 个页面,每个页面有 200 个项目。在我的前端,我总共只有 200 个结果。它就像它只拉第一页。

标签: djangoreactjsdjango-rest-frameworkreact-redux

解决方案


推荐阅读