繁体   English   中英

如何在阿波罗客户端缓存中使用“模式”?

[英]How can I use `schema` in apollo client cache?

我在React项目中使用apollo-client来管理UI状态。 我为阿波罗突变定义了一种模式类型,但它似乎不起作用。

下面是我创建apollo client实例的方法。

const cache = new InMemoryCache();

export const createClient = () => {
  return new ApolloClient({
    cache,
    resolvers: {
      Mutation: {
        ...alertResolvers
      },
    },
    typeDefs: [alertTypeDefs]
  });
};

下面的代码是类型架构定义。 如您所见,我创建了showErrorAlert返回类型Alert

export const alertTypeDefs = gql`
  type Alert {
    id: ID!
    message: String!
    type: String!
    duration: Int!
  }
  extend type Mutation {
    showErrorAlert(message: String!): Alert
  }
`;

我使用下面的代码发送变异。 如您所见,它不会在return对象中返回duration 但是该应用程序可以正常工作。 看来类型对应用程序没有影响。

gql`
  mutation showErrorAlert($message: String!) {
    showErrorAlert(message: $message)  @client {
      id
      message
      type
    }
  }
`;

文档

您可以选择通过ApolloClient构造函数typeDefs参数或本地状态API setTypeDefs方法来设置与Apollo Client一起使用的客户端模式。 此模式不像服务器上那样用于验证,因为graphql用于模式验证的-js模块将大大增加捆绑包的大小。 相反,您的客户端模式用于Apollo Client Devtools中的自省,您可以在其中使用GraphiQL探索您的模式。

换句话说,为本地状态提供typeDefs的唯一typeDefs是允许通过Apollo Client Devtools中的GraphiQL查询本地状态。

没有本地状态的类型验证,尽管如果缓存中对象的一般形状与请求的形状不匹配,则客户端将抛出该异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM