对“ GET_LIST”的响应必须类似于{data:[...]},但是接收到的数据不是数组

时间:2019-07-31 18:58:58

标签: react-admin

我正在尝试使用ra-data-simple-rest data provider

import React from 'react';
import { Admin, fetchUtils, Resource } from 'react-admin';
import simpleRestProvider from 'ra-data-simple-rest';
import { PostList } from './Posts';

const dataProvider = simpleRestProvider('http://localhost:8000');

const App = () => (
    <Admin dataProvider={dataProvider}>
        <Resource name="posts" list={PostList} />
    </Admin>
);

export default App;

react-admin收听http://localhost:3000/#/posts

Api在http://localhost:8000/posts上运行,其返回响应为。

$response = new JsonResponse($output);
$response->headers->set('Content-Range', 'posts 0-0/5');
$response->headers->set('Access-Control-Expose-Headers', 'Content-Range');
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");

将某些内容重新调整为

{
    "data": [
        {
            "id": "1",
            "title": "Hello world",
            "body": "Hello world"
        },
        {
            "id": "2",
            "title": "Hello world",
            "body": "Hello world"
        }
    ],
    "total": 2
}

我收到错误消息

  

对“ GET_LIST”的响应必须类似于{data:[...]},但是接收到的数据不是数组。 dataProvider对于“ GET_LIST”可能是错误的

如果将data键删除为

[
    {
        "id": "1",
        "title": "Hello world",
        "body": "Hello world"
    },
    {
        "id": "2",
        "title": "Hello world",
        "body": "Hello world"
    }
]

正在得到结果。

2 个答案:

答案 0 :(得分:3)

最后,我了解到这正在按react-admin的预期进行。

问题出在我注意到的documentation

enter image description here

这让我感到困惑。

进一步了解https://github.com/marmelab/react-admin/blob/1b6967f3367b13a6675de7047bd9385dc36a8db5/packages/ra-data-simple-rest/src/index.js#L118,我知道数据是由提供程序重建的。

答案 1 :(得分:0)

我遇到同样的问题,检查我的API响应后,我知道对象中缺少一个字段:

{ "data": [ { "id": "1", "title": "Hello world", "body": "Hello world" }, { "title": "Hello world", "body": "Hello world" } ], "total": 2 }
第二个obj中缺少

id。这就是为什么我要面对这个问题

任何遇到此问题的人,请检查API响应中的所有字段。