任何人都具有修改响应数据的固件的经验吗?
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
字段被剥离了
答案 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);
},
},
},
},
},
}),
});