首页 > 解决方案 > 进行嵌套 API 调用以获取所有列表

问题描述

在我的场景中,我有一个 API 调用来命中,并且在 API 的响应中,我必须调用最终的 API 来获取列表记录。

从第一个 API 中,我将获得一个标志,我必须在该标志上进行条件 API 调用以获取记录。

问题是, GET_LIST 被 react-admin 调用,因此我无法处理两个异步 API 调用。

我尝试使用查询和自定义数据源。

这是 react-admin 调用来获取列表的 API 类型。

GET_LIST: {
      request(params: GetListParams): Ticket {
        return {
          method: 'GET',
          url: `${base}/q`,
          headers: makeHeaders(token),
          query: mapQueryParams(params, universalFilters)
        }
      },

      response(res: Object): {total: number, data: Array<Contact>} {
        const {hits, rows} = res
        return {
          total: hits,
          data: rows.map(row => {
            return {...row, id: getId(row)}
          })
        }
      }
    },

这是为列表调用的组件。

export const ContactList = (props) => {
  return (
    <List {...props} filters={<Search />} bulkActionButtons={<PostBulkActions />}>
      <Datagrid className="data-grid">
        <GravatarField source="email" label="" sortable={false} />

        <LinkField
          source="first"
          label="First Name"
          text={ ({first}) => first }
          deriveUrl={ ({id}) => `/#/contacts/${id}` }
          target='' />

        <LinkField  
          source="last"
          label="Last Name"
          text={ ({last}) => last || '(unknown name)' }
          deriveUrl={ ({id}) => `/#/contacts/${id}` }
          target='' />

        <DateField source="lastActivity" />
        <TextField source="email" />
        <PhoneNumberField source="primaryPhone" label="Phone" sortable={false} />
        <MultiTagField source="tags" sortable={false} deletable={false} />
        {/* <DeleteButton /> */}
      </Datagrid>
    </List>
  )
}

标签: javascriptreactjsreact-admin

解决方案


根据我对您的代码的了解,这应该是您的数据提供者的工作。因为它应该返回一个承诺,所以您可以在其中进行两个 api 调用,并且只有在您获得第二个调用响应后才解决


推荐阅读