Reactjs 形成由多个组件请求的单个查询
我正在考虑从标准RESTAPI体系结构转移到graphQL。目前我有一个数据包装器,它在初始化后用用户信息和其他元数据预加载数据集 apollo客户端是否有办法构建多个组件请求的单个查询,并在加载组件后将其发送到graphQL服务器,而不是为每个组件发送单独的查询,并形成应用程序运行所需的数据层Reactjs 形成由多个组件请求的单个查询,reactjs,rest,graphql,apollo,Reactjs,Rest,Graphql,Apollo,我正在考虑从标准RESTAPI体系结构转移到graphQL。目前我有一个数据包装器,它在初始化后用用户信息和其他元数据预加载数据集 apollo客户端是否有办法构建多个组件请求的单个查询,并在加载组件后将其发送到graphQL服务器,而不是为每个组件发送单独的查询,并形成应用程序运行所需的数据层 有什么其他选项可以做到这一点,并使GraphQL比当前实现更好。假设您有以下GraphQL模式: type Query { question(questionId: Int!): Questio
有什么其他选项可以做到这一点,并使GraphQL比当前实现更好。假设您有以下GraphQL模式:
type Query {
question(questionId: Int!): Question
tag(tagId: Int!): Tag
}
type Question {
questionId: Int!
content: String!
}
type Tag {
tagId: Int!
tagName: String!
}
如果要在一个请求中检索2个对象,可以编写以下qraphql请求:
{
question(questionId: 1) {
questionId
content
}
tag(tagId:1){
tagId
tagName
}
}
作为输出,您将收到以下JSON:
{
"data": {
"question": {
"questionId": 1,
"content": "how to code in js?"
},
"tag": {
"tagId": 1,
"tagName": "js"
}
}
}
Apollo客户端中的查询有一个选项
fetchPolicy
,默认值为cache first
,这意味着Apollo将在尝试网络提取之前首先尝试从本地缓存读取数据。如果有多个组件请求已经获取的数据,则不会发生网络调用。只要确保在查询中返回请求数据的id
字段,即使组件没有使用它来确保正确的缓存 这太神奇了,但是如果我直接获取用户,然后获取公司(id:1){users},graphql会明白这是一样的,因为它使用相同的模式吗?是的。缓存基于模式中定义的GraphQL类型进行。在这种情况下,我假设“用户”。