无法转换/归一化/修改GraphQL查询的响应-Apollo Client

时间:2018-07-19 18:45:07

标签: javascript graphql apollo apollo-client

任何人都具有修改响应数据的固件的经验吗?

  const parseResponse = new ApolloLink((operation, forward) => {
    return forward(operation).map((response) => {
      response.data.parsed = transformData(response.data)
      return response
    })
  })
  const link = parseResponse.concat(networkLink)

这在websockets事件上效果很好-数据被转换并添加到数据parsed的{​​{1}}字段中,但是在常规response.data请求下,已解析的字段被删除,因此该组件无法读取它。我已经确认可以在查询请求中正确调用此方法,并且还添加了<Query...字段,但是在固件和组件之间的某个地方,parsed字段被剥离了

1 个答案:

答案 0 :(得分:2)

Apollo Client v3引入了customizing the behavior of cached fields的功能:

您可以自定义Apollo客户端缓存中各个字段的读取和写入方式。为此,您可以为给定字段定义FieldPolicy对象。您将FieldPolicy对象嵌套在与包含字段的类型对应的TypePolicy object中。

以下是将日期字符串解析为Date对象的方法:

export const apolloClient = new ApolloClient({
  link: ...,
  cache: new InMemoryCache({
    typePolicies: {
      Post: {
        fields: {
          updatedAt: {
            read(time: string) {
              return new Date(time);
            },
          },
        },
      },
    },
  }),
});