如何在 react-admin 的显示选项中列出来自另一个端点的数据?
How can I list data from another endpoint inside show option in react-admin?
React-Admin 版本:2.4.0
我有一个列表,其中包含我可以使用此端点列出的钱包信息:
http://myHost:8080/api/v1/private/wallets
现在我想在点击列表中的钱包时显示每个钱包的移动数据。
因此,为了获取钱包移动数据,我需要调用另一个端点,以这种格式发送:
${apiUrl}/${resource}/${params.id}/movements
例如:
http://myHost:8080/api/v1/private/wallets/cd496094-a77a-4e4e-bcd9-3361ff89294a/movements
这个端点 return 我是这样的对象:
{
"_embedded": {
"movements": [
{
"id": "ftr4e2e5-a2bf-49f7-9206-3e2deff3a456",
"amount": 10,
"status": "PENDING"
},
{
"id": "67732ad9-233e-42be-8079-11efe4d158yt",
"amount": 2.56,
"status": "SUCCESS"
}
]
}
}
我有这个代码:
//IMPORTS
export const WalletList = props => (
<List {...props}>
<Datagrid rowClick="show">
<TextField source="id" label="Wallet ID" />
<TextField source="iban" label="IBAN" />
</Datagrid>
</List>
);
export const WalletShow = props => (
<Show {...props}>
<TabbedShowLayout>
<Tab label="Wallet">
<TextField label="Wallet ID" source="id" />
</Tab>
<Tab label="Movements">
<TextField label="Movement ID" source="id" />
</Tab>
</TabbedShowLayout>
</Show>
);
我有一个基于 json-server 的自定义数据提供程序用于此端点:
export default (apiUrl, httpClient = fetchUtils.fetchJson) => {
const convertDataRequestToHTTP = (type, resource, params) => {
let url = '';
const options = {};
switch (type) {
case GET_LIST: {
//...
}
case GET_ONE:
// custom call for movements: /api/v1/private/wallets/{walletId}/movements
if (resource === 'wallets') {
url = `${apiUrl}/${resource}/${params.id}/movements`;
break;
}
url = `${apiUrl}/${resource}/${params.id}`;
break;
case GET_MANY_REFERENCE:
//...
case UPDATE:
//...
case CREATE:
//...
case DELETE:
//...
default:
throw new Error(`Unsupported fetch action type ${type}`);
}
return { url, options };
};
//...
}
而我的错误是:
The response to 'GET_ONE' must be like { data: { id: 123, ... } }, but the received data does not have an 'id' key. The dataProvider is probably wrong for 'GET_ONE'
如何在显示组件中列出?
首先,关于您的 dataProvider
,如 [文档 (https://marmelab.com/react-admin/DataProviders.html#response-format) 中所述,您必须 return 一个包含 data
键的对象 API 响应。这将修复您看到的错误。
其次,关于在显示视图中包含相关数据列表,您应该在选项卡中使用 ReferenceManyField
。它将使用 GET_MANY_REFERENCE
获取类型请求链接到当前 wallet
的所有 movements
。
React-Admin 版本:2.4.0
我有一个列表,其中包含我可以使用此端点列出的钱包信息:
http://myHost:8080/api/v1/private/wallets
现在我想在点击列表中的钱包时显示每个钱包的移动数据。
因此,为了获取钱包移动数据,我需要调用另一个端点,以这种格式发送:
${apiUrl}/${resource}/${params.id}/movements
例如:
http://myHost:8080/api/v1/private/wallets/cd496094-a77a-4e4e-bcd9-3361ff89294a/movements
这个端点 return 我是这样的对象:
{
"_embedded": {
"movements": [
{
"id": "ftr4e2e5-a2bf-49f7-9206-3e2deff3a456",
"amount": 10,
"status": "PENDING"
},
{
"id": "67732ad9-233e-42be-8079-11efe4d158yt",
"amount": 2.56,
"status": "SUCCESS"
}
]
}
}
我有这个代码:
//IMPORTS
export const WalletList = props => (
<List {...props}>
<Datagrid rowClick="show">
<TextField source="id" label="Wallet ID" />
<TextField source="iban" label="IBAN" />
</Datagrid>
</List>
);
export const WalletShow = props => (
<Show {...props}>
<TabbedShowLayout>
<Tab label="Wallet">
<TextField label="Wallet ID" source="id" />
</Tab>
<Tab label="Movements">
<TextField label="Movement ID" source="id" />
</Tab>
</TabbedShowLayout>
</Show>
);
我有一个基于 json-server 的自定义数据提供程序用于此端点:
export default (apiUrl, httpClient = fetchUtils.fetchJson) => {
const convertDataRequestToHTTP = (type, resource, params) => {
let url = '';
const options = {};
switch (type) {
case GET_LIST: {
//...
}
case GET_ONE:
// custom call for movements: /api/v1/private/wallets/{walletId}/movements
if (resource === 'wallets') {
url = `${apiUrl}/${resource}/${params.id}/movements`;
break;
}
url = `${apiUrl}/${resource}/${params.id}`;
break;
case GET_MANY_REFERENCE:
//...
case UPDATE:
//...
case CREATE:
//...
case DELETE:
//...
default:
throw new Error(`Unsupported fetch action type ${type}`);
}
return { url, options };
};
//...
}
而我的错误是:
The response to 'GET_ONE' must be like { data: { id: 123, ... } }, but the received data does not have an 'id' key. The dataProvider is probably wrong for 'GET_ONE'
如何在显示组件中列出?
首先,关于您的 dataProvider
,如 [文档 (https://marmelab.com/react-admin/DataProviders.html#response-format) 中所述,您必须 return 一个包含 data
键的对象 API 响应。这将修复您看到的错误。
其次,关于在显示视图中包含相关数据列表,您应该在选项卡中使用 ReferenceManyField
。它将使用 GET_MANY_REFERENCE
获取类型请求链接到当前 wallet
的所有 movements
。