使用react-admin搭配ra-data-django-rest-framework遇依赖错误,求替代方案
解决方案
替代包推荐
ra-data-rest-client(React Admin官方维护的通用REST数据提供者)
这个包适配标准REST API,Django REST Framework(DRF)的默认输出格式大部分能直接兼容,仅需少量配置适配DRF的特有规则(比如分页、过滤参数)。
安装命令:npm install ra-data-rest-client配置示例(适配DRF分页):
import { Admin, Resource } from 'react-admin'; import { restClient } from 'ra-data-rest-client'; const drfRestClient = restClient('http://your-django-api-url', fetch, { getList: (resource, params) => { const { page, perPage } = params.pagination; const { field, order } = params.sort; const query = new URLSearchParams({ page, page_size: perPage, ordering: order === 'ASC' ? field : `-${field}`, ...params.filter, }); return fetch(`${resource}/?${query}`) .then(response => response.json()) .then(({ count, results }) => ({ data: results, total: count, })); }, // 其他方法(getOne, create等)若无需特殊处理可沿用默认实现 }); const App = () => ( <Admin dataProvider={drfRestClient}> {/* 配置你的Resource */} </Admin> );自定义数据提供者
如果通用包无法满足需求,直接手写数据提供者更灵活。React Admin的数据提供者本质是包含getList、getOne、create、update、delete等方法的对象,只需根据DRF的API格式实现这些方法即可。
极简示例:const drfDataProvider = { getList: async (resource, params) => { const url = new URL(`http://your-django-api-url/${resource}/`); url.searchParams.set('page', params.pagination.page); url.searchParams.set('page_size', params.pagination.perPage); url.searchParams.set('ordering', params.sort.order === 'ASC' ? params.sort.field : `-${params.sort.field}`); Object.entries(params.filter).forEach(([key, value]) => url.searchParams.set(key, value)); const response = await fetch(url); const { count, results } = await response.json(); return { data: results.map(item => ({ ...item, id: item.pk })), // 若DRF用pk作为主键,需映射为id total: count, }; }, getOne: async (resource, params) => { const response = await fetch(`http://your-django-api-url/${resource}/${params.id}/`); const data = await response.json(); return { data: { ...data, id: data.pk } }; }, // 按需实现create、update、delete等方法 };
关于使用其他数据提供者的可行性
完全可以使用其他数据提供者,只要你能将DRF API的参数格式、返回结构与数据提供者的要求适配。比如上述的通用REST包,或者甚至用ra-data-json-server(需更多适配,因为它默认适配JSON Server的格式),但自定义或用通用REST包是更高效的选择。
内容的提问来源于stack exchange,提问作者Hem
相关产品推荐
相关产品推荐

